nixbot

builds

failed python3.14-nixbot-tests checks.aarch64-darwin.nixbot-tests · build #365 · 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 nothing
buildPhase
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 pypaBuildPhase
pythonRuntimeDepsCheckHook
28Executing pythonRuntimeDepsCheck29Checking runtime dependencies for nixbot-0.0.1-py3-none-any.whl30Finished executing pythonRuntimeDepsCheck
installPhase
31Executing pypaInstallPhase32Successfully installed nixbot-0.0.1-py3-none-any.whl33Finished executing pypaInstallPhase
pythonOutputDistPhase
34Executing pythonOutputDistPhase35Finished executing pythonOutputDistPhase
fixupPhase
36checking for references to /nix/var/nix/builds/nix-37012-1646484975/ 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-37012-1646484975/ 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 pythonRemoveTestsDir
installCheckPhase
45no Makefile or custom installCheckPhase, doing nothing
pythonImportsCheckPhase
46Executing pythonImportsCheckPhase
pytestCheckPhase
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-37012-1646484975/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))65ready: 2/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))71/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))75/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))79ready: 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.80 warner(PytestBenchmarkWarning(text))8110 workers [807 items] 82..................ssssss.............sss................................ [ 8%]83........................................................................ [ 17%]84.........F....................................................EE.EEEEEEE [ 26%]85EEEE.EEEEEE.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE.EEEEEEEEEEEEEEEEEEE [ 35%]86EEEEE.E.E.EEEEEs..EE.EEEEE.EEEEEE.EEEEEEEE.EEEE.EEEE.E..E..sEEEEEEEEEEEE [ 44%]87EEEEEEEEEEEEE.E.EEE.EEEEEEEEEEEEEEEEEEEEEEEE..........EEE.EEE........... [ 53%]88......E..E.E.EE..EEEEEEE.EEEEEEE.EEEEEEEE.E.Essssssssssss...........E... [ 62%]89.........E..............EEEEEEEE.EEE.EE.EEE..EEE.EEEEEEE..EE.EEEEEEE.E.. [ 71%]90...............EEEE.EEEEE.EEE.E.EE.EE.....E.EE......E.EEEEEE.....EEEEE.E [ 80%]91EE.EEEE.EEE....EE...E...EEEEEEEEE.EEssss....E.......E.E.EEE.EE........E. [ 89%]92.EEEE.E...EEEs.EEEEE.......EEE.....................F.................... [ 98%]93............... [100%]94==================================== ERRORS ====================================95_______ ERROR at setup of test_scheduled_worktree_id_distinct_per_effect _______96[gw7] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.149798fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>99request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>100101 @pytest.hookimpl(wrapper=True)102 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:103 if (104 fixturedef.argname == "event_loop_policy"105 and fixturedef.func.__module__ != __name__106 ):107 warnings.warn(108 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),109 )110 asyncio_mode = _get_asyncio_mode(request.config)111 if not _is_asyncio_fixture_function(fixturedef.func):112 if asyncio_mode == Mode.STRICT:113 # Ignore async fixtures without explicit asyncio mark in strict mode114 # This applies to pytest_trio fixtures, for example115 return (yield)116 if not _is_coroutine_or_asyncgen(fixturedef.func):117> return (yield)118 ^^^^^119120/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 121_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 122nixbot/tests/conftest.py:33: in postgres_dsn123 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:124 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^125/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__126 return next(self.gen)127 ^^^^^^^^^^^^^^128nixbot/tests/support.py:327: in ephemeral_postgres129 run_sync(apply_migrations(dsn))130nixbot/tests/support.py:285: in run_sync131 return executor.submit(asyncio.run, coro).result(timeout=120)132 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^133/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result134 return self.__get_result()135 ^^^^^^^^^^^^^^^^^^^136/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result137 raise self._exception138/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run139 result = ctx.run(self.task)140 ^^^^^^^^^^^^^^^^^^141/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run142 return fn(*args, **kwargs)143 ^^^^^^^^^^^^^^^^^^^144/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run145 return runner.run(main)146 ^^^^^^^^^^^^^^^^147/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run148 return self._loop.run_until_complete(task)149 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^150/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete151 return future.result()152 ^^^^^^^^^^^^^^^153nixbot/migrations.py:99: in apply_migrations154 migrations = load_migrations()155 ^^^^^^^^^^^^^^^^^156_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 157158 def load_migrations() -> list[Migration]:159 """Load migration scripts shipped with the package, ordered by version."""160 migrations = []161 for entry in resources.files(__package__).joinpath("migrations").iterdir():162 m = _SCRIPT_RE.match(entry.name)163 if m is None:164 continue165 migrations.append(166 Migration(167 version=int(m.group(1)),168 name=m.group(2),169 sql=entry.read_text(),170 )171 )172 migrations.sort(key=lambda mig: mig.version)173 versions = [m.version for m in migrations]174 if len(set(versions)) != len(versions):175 msg = f"Duplicate migration versions: {versions}"176> raise MigrationError(msg)177E 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]178179nixbot/migrations.py:67: MigrationError180___________________ ERROR at setup of test_html_error_pages ____________________181[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14182183fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>184request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>185186 @pytest.hookimpl(wrapper=True)187 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:188 if (189 fixturedef.argname == "event_loop_policy"190 and fixturedef.func.__module__ != __name__191 ):192 warnings.warn(193 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),194 )195 asyncio_mode = _get_asyncio_mode(request.config)196 if not _is_asyncio_fixture_function(fixturedef.func):197 if asyncio_mode == Mode.STRICT:198 # Ignore async fixtures without explicit asyncio mark in strict mode199 # This applies to pytest_trio fixtures, for example200 return (yield)201 if not _is_coroutine_or_asyncgen(fixturedef.func):202> return (yield)203 ^^^^^204205/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 206_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 207nixbot/tests/conftest.py:33: in postgres_dsn208 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:209 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^210/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__211 return next(self.gen)212 ^^^^^^^^^^^^^^213nixbot/tests/support.py:327: in ephemeral_postgres214 run_sync(apply_migrations(dsn))215nixbot/tests/support.py:285: in run_sync216 return executor.submit(asyncio.run, coro).result(timeout=120)217 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^218/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result219 return self.__get_result()220 ^^^^^^^^^^^^^^^^^^^221/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result222 raise self._exception223/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run224 result = ctx.run(self.task)225 ^^^^^^^^^^^^^^^^^^226/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run227 return fn(*args, **kwargs)228 ^^^^^^^^^^^^^^^^^^^229/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run230 return runner.run(main)231 ^^^^^^^^^^^^^^^^232/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run233 return self._loop.run_until_complete(task)234 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^235/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete236 return future.result()237 ^^^^^^^^^^^^^^^238nixbot/migrations.py:99: in apply_migrations239 migrations = load_migrations()240 ^^^^^^^^^^^^^^^^^241_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 242243 def load_migrations() -> list[Migration]:244 """Load migration scripts shipped with the package, ordered by version."""245 migrations = []246 for entry in resources.files(__package__).joinpath("migrations").iterdir():247 m = _SCRIPT_RE.match(entry.name)248 if m is None:249 continue250 migrations.append(251 Migration(252 version=int(m.group(1)),253 name=m.group(2),254 sql=entry.read_text(),255 )256 )257 migrations.sort(key=lambda mig: mig.version)258 versions = [m.version for m in migrations]259 if len(set(versions)) != len(versions):260 msg = f"Duplicate migration versions: {versions}"261> raise MigrationError(msg)262E 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]263264nixbot/migrations.py:67: MigrationError265_______ ERROR at setup of test_scheduled_worktree_id_sanitizes_traversal _______266[gw7] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14267268request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>269tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw7'), _retention_count=3, _retention_policy='all')270271 @pytest.fixture(scope="module")272 def postgres_dsn(273 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory274 ) -> Iterator[str]:275 if shutil.which("initdb") is None:276 pytest.skip("postgresql not available")277 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")278> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:279 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^280281nixbot/tests/conftest.py:33: 282_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 283/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__284 return next(self.gen)285 ^^^^^^^^^^^^^^286nixbot/tests/support.py:327: in ephemeral_postgres287 run_sync(apply_migrations(dsn))288nixbot/tests/support.py:285: in run_sync289 return executor.submit(asyncio.run, coro).result(timeout=120)290 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^291/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result292 return self.__get_result()293 ^^^^^^^^^^^^^^^^^^^294/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result295 raise self._exception296/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run297 result = ctx.run(self.task)298 ^^^^^^^^^^^^^^^^^^299/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run300 return fn(*args, **kwargs)301 ^^^^^^^^^^^^^^^^^^^302/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run303 return runner.run(main)304 ^^^^^^^^^^^^^^^^305/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run306 return self._loop.run_until_complete(task)307 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^308/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete309 return future.result()310 ^^^^^^^^^^^^^^^311nixbot/migrations.py:99: in apply_migrations312 migrations = load_migrations()313 ^^^^^^^^^^^^^^^^^314_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 315316 def load_migrations() -> list[Migration]:317 """Load migration scripts shipped with the package, ordered by version."""318 migrations = []319 for entry in resources.files(__package__).joinpath("migrations").iterdir():320 m = _SCRIPT_RE.match(entry.name)321 if m is None:322 continue323 migrations.append(324 Migration(325 version=int(m.group(1)),326 name=m.group(2),327 sql=entry.read_text(),328 )329 )330 migrations.sort(key=lambda mig: mig.version)331 versions = [m.version for m in migrations]332 if len(set(versions)) != len(versions):333 msg = f"Duplicate migration versions: {versions}"334> raise MigrationError(msg)335E 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]336337nixbot/migrations.py:67: MigrationError338_______ ERROR at setup of test_control_buttons_hidden_without_permission _______339[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14340341fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>342request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>343344 @pytest.hookimpl(wrapper=True)345 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:346 if (347 fixturedef.argname == "event_loop_policy"348 and fixturedef.func.__module__ != __name__349 ):350 warnings.warn(351 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),352 )353 asyncio_mode = _get_asyncio_mode(request.config)354 if not _is_asyncio_fixture_function(fixturedef.func):355 if asyncio_mode == Mode.STRICT:356 # Ignore async fixtures without explicit asyncio mark in strict mode357 # This applies to pytest_trio fixtures, for example358 return (yield)359 if not _is_coroutine_or_asyncgen(fixturedef.func):360> return (yield)361 ^^^^^362363/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 364_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 365nixbot/tests/conftest.py:33: in postgres_dsn366 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:367 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^368/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__369 return next(self.gen)370 ^^^^^^^^^^^^^^371nixbot/tests/support.py:327: in ephemeral_postgres372 run_sync(apply_migrations(dsn))373nixbot/tests/support.py:285: in run_sync374 return executor.submit(asyncio.run, coro).result(timeout=120)375 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^376/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result377 return self.__get_result()378 ^^^^^^^^^^^^^^^^^^^379/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result380 raise self._exception381/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run382 result = ctx.run(self.task)383 ^^^^^^^^^^^^^^^^^^384/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run385 return fn(*args, **kwargs)386 ^^^^^^^^^^^^^^^^^^^387/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run388 return runner.run(main)389 ^^^^^^^^^^^^^^^^390/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run391 return self._loop.run_until_complete(task)392 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^393/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete394 return future.result()395 ^^^^^^^^^^^^^^^396nixbot/migrations.py:99: in apply_migrations397 migrations = load_migrations()398 ^^^^^^^^^^^^^^^^^399_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 400401 def load_migrations() -> list[Migration]:402 """Load migration scripts shipped with the package, ordered by version."""403 migrations = []404 for entry in resources.files(__package__).joinpath("migrations").iterdir():405 m = _SCRIPT_RE.match(entry.name)406 if m is None:407 continue408 migrations.append(409 Migration(410 version=int(m.group(1)),411 name=m.group(2),412 sql=entry.read_text(),413 )414 )415 migrations.sort(key=lambda mig: mig.version)416 versions = [m.version for m in migrations]417 if len(set(versions)) != len(versions):418 msg = f"Duplicate migration versions: {versions}"419> raise MigrationError(msg)420E 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]421422nixbot/migrations.py:67: MigrationError423_________ ERROR at setup of test_project_store_sync_and_legacy_import __________424[gw5] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14425426self = <Coroutine test_project_store_sync_and_legacy_import>427428 def setup(self) -> None:429 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"430 if runner_fixture_id not in self.fixturenames:431 self.fixturenames.append(runner_fixture_id)432 # When loop factories are configured, resolve the loop factory433 # fixture early so that a factory variant change cascades cache434 # invalidation before any async fixture checks its cache.435 hook_caller = self.config.hook.pytest_asyncio_loop_factories436 if hook_caller.get_hookimpls():437 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)438> return super().setup()439 ^^^^^^^^^^^^^^^440441/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 442_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 443/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup444 return (yield)445 ^^^^^446nixbot/tests/conftest.py:33: in postgres_dsn447 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:448 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^449/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__450 return next(self.gen)451 ^^^^^^^^^^^^^^452nixbot/tests/support.py:327: in ephemeral_postgres453 run_sync(apply_migrations(dsn))454nixbot/tests/support.py:285: in run_sync455 return executor.submit(asyncio.run, coro).result(timeout=120)456 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^457/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result458 return self.__get_result()459 ^^^^^^^^^^^^^^^^^^^460/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result461 raise self._exception462/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run463 result = ctx.run(self.task)464 ^^^^^^^^^^^^^^^^^^465/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run466 return fn(*args, **kwargs)467 ^^^^^^^^^^^^^^^^^^^468/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run469 return runner.run(main)470 ^^^^^^^^^^^^^^^^471/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run472 return self._loop.run_until_complete(task)473 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^474/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete475 return future.result()476 ^^^^^^^^^^^^^^^477nixbot/migrations.py:99: in apply_migrations478 migrations = load_migrations()479 ^^^^^^^^^^^^^^^^^480_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 481482 def load_migrations() -> list[Migration]:483 """Load migration scripts shipped with the package, ordered by version."""484 migrations = []485 for entry in resources.files(__package__).joinpath("migrations").iterdir():486 m = _SCRIPT_RE.match(entry.name)487 if m is None:488 continue489 migrations.append(490 Migration(491 version=int(m.group(1)),492 name=m.group(2),493 sql=entry.read_text(),494 )495 )496 migrations.sort(key=lambda mig: mig.version)497 versions = [m.version for m in migrations]498 if len(set(versions)) != len(versions):499 msg = f"Duplicate migration versions: {versions}"500> raise MigrationError(msg)501E 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]502503nixbot/migrations.py:67: MigrationError504_________________ ERROR at setup of test_migrations_idempotent _________________505[gw9] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14506507self = <Coroutine test_migrations_idempotent>508509 def setup(self) -> None:510 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"511 if runner_fixture_id not in self.fixturenames:512 self.fixturenames.append(runner_fixture_id)513 # When loop factories are configured, resolve the loop factory514 # fixture early so that a factory variant change cascades cache515 # invalidation before any async fixture checks its cache.516 hook_caller = self.config.hook.pytest_asyncio_loop_factories517 if hook_caller.get_hookimpls():518 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)519> return super().setup()520 ^^^^^^^^^^^^^^^521522/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 523_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 524/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup525 return (yield)526 ^^^^^527nixbot/tests/conftest.py:33: in postgres_dsn528 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:529 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^530/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__531 return next(self.gen)532 ^^^^^^^^^^^^^^533nixbot/tests/support.py:327: in ephemeral_postgres534 run_sync(apply_migrations(dsn))535nixbot/tests/support.py:285: in run_sync536 return executor.submit(asyncio.run, coro).result(timeout=120)537 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^538/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result539 return self.__get_result()540 ^^^^^^^^^^^^^^^^^^^541/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result542 raise self._exception543/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run544 result = ctx.run(self.task)545 ^^^^^^^^^^^^^^^^^^546/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run547 return fn(*args, **kwargs)548 ^^^^^^^^^^^^^^^^^^^549/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run550 return runner.run(main)551 ^^^^^^^^^^^^^^^^552/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run553 return self._loop.run_until_complete(task)554 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^555/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete556 return future.result()557 ^^^^^^^^^^^^^^^558nixbot/migrations.py:99: in apply_migrations559 migrations = load_migrations()560 ^^^^^^^^^^^^^^^^^561_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 562563 def load_migrations() -> list[Migration]:564 """Load migration scripts shipped with the package, ordered by version."""565 migrations = []566 for entry in resources.files(__package__).joinpath("migrations").iterdir():567 m = _SCRIPT_RE.match(entry.name)568 if m is None:569 continue570 migrations.append(571 Migration(572 version=int(m.group(1)),573 name=m.group(2),574 sql=entry.read_text(),575 )576 )577 migrations.sort(key=lambda mig: mig.version)578 versions = [m.version for m in migrations]579 if len(set(versions)) != len(versions):580 msg = f"Duplicate migration versions: {versions}"581> raise MigrationError(msg)582E 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]583584nixbot/migrations.py:67: MigrationError585________________ ERROR at setup of test_resolve_credential_path ________________586[gw7] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14587588request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>589tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw7'), _retention_count=3, _retention_policy='all')590591 @pytest.fixture(scope="module")592 def postgres_dsn(593 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory594 ) -> Iterator[str]:595 if shutil.which("initdb") is None:596 pytest.skip("postgresql not available")597 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")598> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:599 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^600601nixbot/tests/conftest.py:33: 602_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 603/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__604 return next(self.gen)605 ^^^^^^^^^^^^^^606nixbot/tests/support.py:327: in ephemeral_postgres607 run_sync(apply_migrations(dsn))608nixbot/tests/support.py:285: in run_sync609 return executor.submit(asyncio.run, coro).result(timeout=120)610 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^611/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result612 return self.__get_result()613 ^^^^^^^^^^^^^^^^^^^614/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result615 raise self._exception616/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run617 result = ctx.run(self.task)618 ^^^^^^^^^^^^^^^^^^619/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run620 return fn(*args, **kwargs)621 ^^^^^^^^^^^^^^^^^^^622/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run623 return runner.run(main)624 ^^^^^^^^^^^^^^^^625/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run626 return self._loop.run_until_complete(task)627 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^628/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete629 return future.result()630 ^^^^^^^^^^^^^^^631nixbot/migrations.py:99: in apply_migrations632 migrations = load_migrations()633 ^^^^^^^^^^^^^^^^^634_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 635636 def load_migrations() -> list[Migration]:637 """Load migration scripts shipped with the package, ordered by version."""638 migrations = []639 for entry in resources.files(__package__).joinpath("migrations").iterdir():640 m = _SCRIPT_RE.match(entry.name)641 if m is None:642 continue643 migrations.append(644 Migration(645 version=int(m.group(1)),646 name=m.group(2),647 sql=entry.read_text(),648 )649 )650 migrations.sort(key=lambda mig: mig.version)651 versions = [m.version for m in migrations]652 if len(set(versions)) != len(versions):653 msg = f"Duplicate migration versions: {versions}"654> raise MigrationError(msg)655E 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]656657nixbot/migrations.py:67: MigrationError658______________ ERROR at setup of test_api_strips_ansi_from_errors ______________659[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14660661request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>662tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')663664 @pytest.fixture(scope="module")665 def postgres_dsn(666 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory667 ) -> Iterator[str]:668 if shutil.which("initdb") is None:669 pytest.skip("postgresql not available")670 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")671> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:672 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^673674nixbot/tests/conftest.py:33: 675_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 676/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__677 return next(self.gen)678 ^^^^^^^^^^^^^^679nixbot/tests/support.py:327: in ephemeral_postgres680 run_sync(apply_migrations(dsn))681nixbot/tests/support.py:285: in run_sync682 return executor.submit(asyncio.run, coro).result(timeout=120)683 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^684/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result685 return self.__get_result()686 ^^^^^^^^^^^^^^^^^^^687/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result688 raise self._exception689/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run690 result = ctx.run(self.task)691 ^^^^^^^^^^^^^^^^^^692/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run693 return fn(*args, **kwargs)694 ^^^^^^^^^^^^^^^^^^^695/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run696 return runner.run(main)697 ^^^^^^^^^^^^^^^^698/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run699 return self._loop.run_until_complete(task)700 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^701/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete702 return future.result()703 ^^^^^^^^^^^^^^^704nixbot/migrations.py:99: in apply_migrations705 migrations = load_migrations()706 ^^^^^^^^^^^^^^^^^707_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 708709 def load_migrations() -> list[Migration]:710 """Load migration scripts shipped with the package, ordered by version."""711 migrations = []712 for entry in resources.files(__package__).joinpath("migrations").iterdir():713 m = _SCRIPT_RE.match(entry.name)714 if m is None:715 continue716 migrations.append(717 Migration(718 version=int(m.group(1)),719 name=m.group(2),720 sql=entry.read_text(),721 )722 )723 migrations.sort(key=lambda mig: mig.version)724 versions = [m.version for m in migrations]725 if len(set(versions)) != len(versions):726 msg = f"Duplicate migration versions: {versions}"727> raise MigrationError(msg)728E 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]729730nixbot/migrations.py:67: MigrationError731____________________ ERROR at setup of test_full_lifecycle _____________________732[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14733734self = <Coroutine test_full_lifecycle>735736 def setup(self) -> None:737 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"738 if runner_fixture_id not in self.fixturenames:739 self.fixturenames.append(runner_fixture_id)740 # When loop factories are configured, resolve the loop factory741 # fixture early so that a factory variant change cascades cache742 # invalidation before any async fixture checks its cache.743 hook_caller = self.config.hook.pytest_asyncio_loop_factories744 if hook_caller.get_hookimpls():745 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)746> return super().setup()747 ^^^^^^^^^^^^^^^748749/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 750_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 751/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup752 return (yield)753 ^^^^^754nixbot/tests/conftest.py:33: in postgres_dsn755 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:756 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^757/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__758 return next(self.gen)759 ^^^^^^^^^^^^^^760nixbot/tests/support.py:327: in ephemeral_postgres761 run_sync(apply_migrations(dsn))762nixbot/tests/support.py:285: in run_sync763 return executor.submit(asyncio.run, coro).result(timeout=120)764 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^765/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result766 return self.__get_result()767 ^^^^^^^^^^^^^^^^^^^768/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result769 raise self._exception770/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run771 result = ctx.run(self.task)772 ^^^^^^^^^^^^^^^^^^773/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run774 return fn(*args, **kwargs)775 ^^^^^^^^^^^^^^^^^^^776/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run777 return runner.run(main)778 ^^^^^^^^^^^^^^^^779/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run780 return self._loop.run_until_complete(task)781 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^782/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete783 return future.result()784 ^^^^^^^^^^^^^^^785nixbot/migrations.py:99: in apply_migrations786 migrations = load_migrations()787 ^^^^^^^^^^^^^^^^^788_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 789790 def load_migrations() -> list[Migration]:791 """Load migration scripts shipped with the package, ordered by version."""792 migrations = []793 for entry in resources.files(__package__).joinpath("migrations").iterdir():794 m = _SCRIPT_RE.match(entry.name)795 if m is None:796 continue797 migrations.append(798 Migration(799 version=int(m.group(1)),800 name=m.group(2),801 sql=entry.read_text(),802 )803 )804 migrations.sort(key=lambda mig: mig.version)805 versions = [m.version for m in migrations]806 if len(set(versions)) != len(versions):807 msg = f"Duplicate migration versions: {versions}"808> raise MigrationError(msg)809E 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]810811nixbot/migrations.py:67: MigrationError812_______________________ ERROR at setup of test_homepage ________________________813[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14814815request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>816tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')817818 @pytest.fixture(scope="module")819 def postgres_dsn(820 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory821 ) -> Iterator[str]:822 if shutil.which("initdb") is None:823 pytest.skip("postgresql not available")824 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")825> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:826 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^827828nixbot/tests/conftest.py:33: 829_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 830/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__831 return next(self.gen)832 ^^^^^^^^^^^^^^833nixbot/tests/support.py:327: in ephemeral_postgres834 run_sync(apply_migrations(dsn))835nixbot/tests/support.py:285: in run_sync836 return executor.submit(asyncio.run, coro).result(timeout=120)837 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^838/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result839 return self.__get_result()840 ^^^^^^^^^^^^^^^^^^^841/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result842 raise self._exception843/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run844 result = ctx.run(self.task)845 ^^^^^^^^^^^^^^^^^^846/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run847 return fn(*args, **kwargs)848 ^^^^^^^^^^^^^^^^^^^849/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run850 return runner.run(main)851 ^^^^^^^^^^^^^^^^852/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run853 return self._loop.run_until_complete(task)854 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^855/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete856 return future.result()857 ^^^^^^^^^^^^^^^858nixbot/migrations.py:99: in apply_migrations859 migrations = load_migrations()860 ^^^^^^^^^^^^^^^^^861_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 862863 def load_migrations() -> list[Migration]:864 """Load migration scripts shipped with the package, ordered by version."""865 migrations = []866 for entry in resources.files(__package__).joinpath("migrations").iterdir():867 m = _SCRIPT_RE.match(entry.name)868 if m is None:869 continue870 migrations.append(871 Migration(872 version=int(m.group(1)),873 name=m.group(2),874 sql=entry.read_text(),875 )876 )877 migrations.sort(key=lambda mig: mig.version)878 versions = [m.version for m in migrations]879 if len(set(versions)) != len(versions):880 msg = f"Duplicate migration versions: {versions}"881> raise MigrationError(msg)882E 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]883884nixbot/migrations.py:67: MigrationError885___________ ERROR at setup of test_failed_migration_error_not_masked ___________886[gw9] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14887888self = <Coroutine test_failed_migration_error_not_masked>889890 def setup(self) -> None:891 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"892 if runner_fixture_id not in self.fixturenames:893 self.fixturenames.append(runner_fixture_id)894 # When loop factories are configured, resolve the loop factory895 # fixture early so that a factory variant change cascades cache896 # invalidation before any async fixture checks its cache.897 hook_caller = self.config.hook.pytest_asyncio_loop_factories898 if hook_caller.get_hookimpls():899 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)900> return super().setup()901 ^^^^^^^^^^^^^^^902903/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 904_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 905nixbot/tests/conftest.py:33: in postgres_dsn906 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:907 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^908/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__909 return next(self.gen)910 ^^^^^^^^^^^^^^911nixbot/tests/support.py:327: in ephemeral_postgres912 run_sync(apply_migrations(dsn))913nixbot/tests/support.py:285: in run_sync914 return executor.submit(asyncio.run, coro).result(timeout=120)915 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^916/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result917 return self.__get_result()918 ^^^^^^^^^^^^^^^^^^^919/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result920 raise self._exception921/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run922 result = ctx.run(self.task)923 ^^^^^^^^^^^^^^^^^^924/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run925 return fn(*args, **kwargs)926 ^^^^^^^^^^^^^^^^^^^927/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run928 return runner.run(main)929 ^^^^^^^^^^^^^^^^930/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run931 return self._loop.run_until_complete(task)932 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^933/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete934 return future.result()935 ^^^^^^^^^^^^^^^936nixbot/migrations.py:99: in apply_migrations937 migrations = load_migrations()938 ^^^^^^^^^^^^^^^^^939_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 940941 def load_migrations() -> list[Migration]:942 """Load migration scripts shipped with the package, ordered by version."""943 migrations = []944 for entry in resources.files(__package__).joinpath("migrations").iterdir():945 m = _SCRIPT_RE.match(entry.name)946 if m is None:947 continue948 migrations.append(949 Migration(950 version=int(m.group(1)),951 name=m.group(2),952 sql=entry.read_text(),953 )954 )955 migrations.sort(key=lambda mig: mig.version)956 versions = [m.version for m in migrations]957 if len(set(versions)) != len(versions):958 msg = f"Duplicate migration versions: {versions}"959> raise MigrationError(msg)960E 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]961962nixbot/migrations.py:67: MigrationError963___________ ERROR at setup of test_build_service_accepts_asyncpg_dsn ___________964[gw7] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14965966self = <Coroutine test_build_service_accepts_asyncpg_dsn>967968 def setup(self) -> None:969 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"970 if runner_fixture_id not in self.fixturenames:971 self.fixturenames.append(runner_fixture_id)972 # When loop factories are configured, resolve the loop factory973 # fixture early so that a factory variant change cascades cache974 # invalidation before any async fixture checks its cache.975 hook_caller = self.config.hook.pytest_asyncio_loop_factories976 if hook_caller.get_hookimpls():977 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)978> return super().setup()979 ^^^^^^^^^^^^^^^980981/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 982_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 983nixbot/tests/conftest.py:33: in postgres_dsn984 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:985 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^986/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__987 return next(self.gen)988 ^^^^^^^^^^^^^^989nixbot/tests/support.py:327: in ephemeral_postgres990 run_sync(apply_migrations(dsn))991nixbot/tests/support.py:285: in run_sync992 return executor.submit(asyncio.run, coro).result(timeout=120)993 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^994/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result995 return self.__get_result()996 ^^^^^^^^^^^^^^^^^^^997/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result998 raise self._exception999/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1000 result = ctx.run(self.task)1001 ^^^^^^^^^^^^^^^^^^1002/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1003 return fn(*args, **kwargs)1004 ^^^^^^^^^^^^^^^^^^^1005/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1006 return runner.run(main)1007 ^^^^^^^^^^^^^^^^1008/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1009 return self._loop.run_until_complete(task)1010 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1011/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1012 return future.result()1013 ^^^^^^^^^^^^^^^1014nixbot/migrations.py:99: in apply_migrations1015 migrations = load_migrations()1016 ^^^^^^^^^^^^^^^^^1017_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 10181019 def load_migrations() -> list[Migration]:1020 """Load migration scripts shipped with the package, ordered by version."""1021 migrations = []1022 for entry in resources.files(__package__).joinpath("migrations").iterdir():1023 m = _SCRIPT_RE.match(entry.name)1024 if m is None:1025 continue1026 migrations.append(1027 Migration(1028 version=int(m.group(1)),1029 name=m.group(2),1030 sql=entry.read_text(),1031 )1032 )1033 migrations.sort(key=lambda mig: mig.version)1034 versions = [m.version for m in migrations]1035 if len(set(versions)) != len(versions):1036 msg = f"Duplicate migration versions: {versions}"1037> raise MigrationError(msg)1038E 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]10391040nixbot/migrations.py:67: MigrationError1041_____________ ERROR at setup of test_admin_can_restart_and_cancel ______________1042[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1410431044request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>1045tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all')10461047 @pytest.fixture(scope="module")1048 def postgres_dsn(1049 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1050 ) -> Iterator[str]:1051 if shutil.which("initdb") is None:1052 pytest.skip("postgresql not available")1053 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1054> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1055 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^10561057nixbot/tests/conftest.py:33: 1058_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1059/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1060 return next(self.gen)1061 ^^^^^^^^^^^^^^1062nixbot/tests/support.py:327: in ephemeral_postgres1063 run_sync(apply_migrations(dsn))1064nixbot/tests/support.py:285: in run_sync1065 return executor.submit(asyncio.run, coro).result(timeout=120)1066 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1067/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1068 return self.__get_result()1069 ^^^^^^^^^^^^^^^^^^^1070/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1071 raise self._exception1072/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1073 result = ctx.run(self.task)1074 ^^^^^^^^^^^^^^^^^^1075/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1076 return fn(*args, **kwargs)1077 ^^^^^^^^^^^^^^^^^^^1078/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1079 return runner.run(main)1080 ^^^^^^^^^^^^^^^^1081/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1082 return self._loop.run_until_complete(task)1083 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1084/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1085 return future.result()1086 ^^^^^^^^^^^^^^^1087nixbot/migrations.py:99: in apply_migrations1088 migrations = load_migrations()1089 ^^^^^^^^^^^^^^^^^1090_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 10911092 def load_migrations() -> list[Migration]:1093 """Load migration scripts shipped with the package, ordered by version."""1094 migrations = []1095 for entry in resources.files(__package__).joinpath("migrations").iterdir():1096 m = _SCRIPT_RE.match(entry.name)1097 if m is None:1098 continue1099 migrations.append(1100 Migration(1101 version=int(m.group(1)),1102 name=m.group(2),1103 sql=entry.read_text(),1104 )1105 )1106 migrations.sort(key=lambda mig: mig.version)1107 versions = [m.version for m in migrations]1108 if len(set(versions)) != len(versions):1109 msg = f"Duplicate migration versions: {versions}"1110> raise MigrationError(msg)1111E 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]11121113nixbot/migrations.py:67: MigrationError1114__________________ ERROR at setup of test_failure_aggregation __________________1115[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1411161117self = <Coroutine test_failure_aggregation>11181119 def setup(self) -> None:1120 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1121 if runner_fixture_id not in self.fixturenames:1122 self.fixturenames.append(runner_fixture_id)1123 # When loop factories are configured, resolve the loop factory1124 # fixture early so that a factory variant change cascades cache1125 # invalidation before any async fixture checks its cache.1126 hook_caller = self.config.hook.pytest_asyncio_loop_factories1127 if hook_caller.get_hookimpls():1128 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1129> return super().setup()1130 ^^^^^^^^^^^^^^^11311132/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1133_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1134nixbot/tests/conftest.py:33: in postgres_dsn1135 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1136 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1137/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1138 return next(self.gen)1139 ^^^^^^^^^^^^^^1140nixbot/tests/support.py:327: in ephemeral_postgres1141 run_sync(apply_migrations(dsn))1142nixbot/tests/support.py:285: in run_sync1143 return executor.submit(asyncio.run, coro).result(timeout=120)1144 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1145/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1146 return self.__get_result()1147 ^^^^^^^^^^^^^^^^^^^1148/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1149 raise self._exception1150/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1151 result = ctx.run(self.task)1152 ^^^^^^^^^^^^^^^^^^1153/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1154 return fn(*args, **kwargs)1155 ^^^^^^^^^^^^^^^^^^^1156/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1157 return runner.run(main)1158 ^^^^^^^^^^^^^^^^1159/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1160 return self._loop.run_until_complete(task)1161 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1162/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1163 return future.result()1164 ^^^^^^^^^^^^^^^1165nixbot/migrations.py:99: in apply_migrations1166 migrations = load_migrations()1167 ^^^^^^^^^^^^^^^^^1168_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 11691170 def load_migrations() -> list[Migration]:1171 """Load migration scripts shipped with the package, ordered by version."""1172 migrations = []1173 for entry in resources.files(__package__).joinpath("migrations").iterdir():1174 m = _SCRIPT_RE.match(entry.name)1175 if m is None:1176 continue1177 migrations.append(1178 Migration(1179 version=int(m.group(1)),1180 name=m.group(2),1181 sql=entry.read_text(),1182 )1183 )1184 migrations.sort(key=lambda mig: mig.version)1185 versions = [m.version for m in migrations]1186 if len(set(versions)) != len(versions):1187 msg = f"Duplicate migration versions: {versions}"1188> raise MigrationError(msg)1189E 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]11901191nixbot/migrations.py:67: MigrationError1192______ ERROR at setup of test_legacy_import_runs_despite_pull_based_rows _______1193[gw5] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1411941195self = <Coroutine test_legacy_import_runs_despite_pull_based_rows>11961197 def setup(self) -> None:1198 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1199 if runner_fixture_id not in self.fixturenames:1200 self.fixturenames.append(runner_fixture_id)1201 # When loop factories are configured, resolve the loop factory1202 # fixture early so that a factory variant change cascades cache1203 # invalidation before any async fixture checks its cache.1204 hook_caller = self.config.hook.pytest_asyncio_loop_factories1205 if hook_caller.get_hookimpls():1206 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1207> return super().setup()1208 ^^^^^^^^^^^^^^^12091210/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1211_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1212nixbot/tests/conftest.py:33: in postgres_dsn1213 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1214 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1215/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1216 return next(self.gen)1217 ^^^^^^^^^^^^^^1218nixbot/tests/support.py:327: in ephemeral_postgres1219 run_sync(apply_migrations(dsn))1220nixbot/tests/support.py:285: in run_sync1221 return executor.submit(asyncio.run, coro).result(timeout=120)1222 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1223/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1224 return self.__get_result()1225 ^^^^^^^^^^^^^^^^^^^1226/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1227 raise self._exception1228/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1229 result = ctx.run(self.task)1230 ^^^^^^^^^^^^^^^^^^1231/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1232 return fn(*args, **kwargs)1233 ^^^^^^^^^^^^^^^^^^^1234/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1235 return runner.run(main)1236 ^^^^^^^^^^^^^^^^1237/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1238 return self._loop.run_until_complete(task)1239 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1240/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1241 return future.result()1242 ^^^^^^^^^^^^^^^1243nixbot/migrations.py:99: in apply_migrations1244 migrations = load_migrations()1245 ^^^^^^^^^^^^^^^^^1246_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 12471248 def load_migrations() -> list[Migration]:1249 """Load migration scripts shipped with the package, ordered by version."""1250 migrations = []1251 for entry in resources.files(__package__).joinpath("migrations").iterdir():1252 m = _SCRIPT_RE.match(entry.name)1253 if m is None:1254 continue1255 migrations.append(1256 Migration(1257 version=int(m.group(1)),1258 name=m.group(2),1259 sql=entry.read_text(),1260 )1261 )1262 migrations.sort(key=lambda mig: mig.version)1263 versions = [m.version for m in migrations]1264 if len(set(versions)) != len(versions):1265 msg = f"Duplicate migration versions: {versions}"1266> raise MigrationError(msg)1267E 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]12681269nixbot/migrations.py:67: MigrationError1270_______________ ERROR at setup of test_project_page_with_filters _______________1271[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1412721273request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>1274tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')12751276 @pytest.fixture(scope="module")1277 def postgres_dsn(1278 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1279 ) -> Iterator[str]:1280 if shutil.which("initdb") is None:1281 pytest.skip("postgresql not available")1282 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1283> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1284 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^12851286nixbot/tests/conftest.py:33: 1287_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1288/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1289 return next(self.gen)1290 ^^^^^^^^^^^^^^1291nixbot/tests/support.py:327: in ephemeral_postgres1292 run_sync(apply_migrations(dsn))1293nixbot/tests/support.py:285: in run_sync1294 return executor.submit(asyncio.run, coro).result(timeout=120)1295 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1296/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1297 return self.__get_result()1298 ^^^^^^^^^^^^^^^^^^^1299/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1300 raise self._exception1301/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1302 result = ctx.run(self.task)1303 ^^^^^^^^^^^^^^^^^^1304/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1305 return fn(*args, **kwargs)1306 ^^^^^^^^^^^^^^^^^^^1307/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1308 return runner.run(main)1309 ^^^^^^^^^^^^^^^^1310/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1311 return self._loop.run_until_complete(task)1312 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1313/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1314 return future.result()1315 ^^^^^^^^^^^^^^^1316nixbot/migrations.py:99: in apply_migrations1317 migrations = load_migrations()1318 ^^^^^^^^^^^^^^^^^1319_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 13201321 def load_migrations() -> list[Migration]:1322 """Load migration scripts shipped with the package, ordered by version."""1323 migrations = []1324 for entry in resources.files(__package__).joinpath("migrations").iterdir():1325 m = _SCRIPT_RE.match(entry.name)1326 if m is None:1327 continue1328 migrations.append(1329 Migration(1330 version=int(m.group(1)),1331 name=m.group(2),1332 sql=entry.read_text(),1333 )1334 )1335 migrations.sort(key=lambda mig: mig.version)1336 versions = [m.version for m in migrations]1337 if len(set(versions)) != len(versions):1338 msg = f"Duplicate migration versions: {versions}"1339> raise MigrationError(msg)1340E 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]13411342nixbot/migrations.py:67: MigrationError1343________ ERROR at setup of test_visibility_fetcher_and_cache_ttl_wired _________1344[gw7] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1413451346self = <Coroutine test_visibility_fetcher_and_cache_ttl_wired>13471348 def setup(self) -> None:1349 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1350 if runner_fixture_id not in self.fixturenames:1351 self.fixturenames.append(runner_fixture_id)1352 # When loop factories are configured, resolve the loop factory1353 # fixture early so that a factory variant change cascades cache1354 # invalidation before any async fixture checks its cache.1355 hook_caller = self.config.hook.pytest_asyncio_loop_factories1356 if hook_caller.get_hookimpls():1357 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1358> return super().setup()1359 ^^^^^^^^^^^^^^^13601361/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1362_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1363nixbot/tests/conftest.py:33: in postgres_dsn1364 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1365 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1366/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1367 return next(self.gen)1368 ^^^^^^^^^^^^^^1369nixbot/tests/support.py:327: in ephemeral_postgres1370 run_sync(apply_migrations(dsn))1371nixbot/tests/support.py:285: in run_sync1372 return executor.submit(asyncio.run, coro).result(timeout=120)1373 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1374/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1375 return self.__get_result()1376 ^^^^^^^^^^^^^^^^^^^1377/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1378 raise self._exception1379/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1380 result = ctx.run(self.task)1381 ^^^^^^^^^^^^^^^^^^1382/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1383 return fn(*args, **kwargs)1384 ^^^^^^^^^^^^^^^^^^^1385/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1386 return runner.run(main)1387 ^^^^^^^^^^^^^^^^1388/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1389 return self._loop.run_until_complete(task)1390 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1391/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1392 return future.result()1393 ^^^^^^^^^^^^^^^1394nixbot/migrations.py:99: in apply_migrations1395 migrations = load_migrations()1396 ^^^^^^^^^^^^^^^^^1397_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 13981399 def load_migrations() -> list[Migration]:1400 """Load migration scripts shipped with the package, ordered by version."""1401 migrations = []1402 for entry in resources.files(__package__).joinpath("migrations").iterdir():1403 m = _SCRIPT_RE.match(entry.name)1404 if m is None:1405 continue1406 migrations.append(1407 Migration(1408 version=int(m.group(1)),1409 name=m.group(2),1410 sql=entry.read_text(),1411 )1412 )1413 migrations.sort(key=lambda mig: mig.version)1414 versions = [m.version for m in migrations]1415 if len(set(versions)) != len(versions):1416 msg = f"Duplicate migration versions: {versions}"1417> raise MigrationError(msg)1418E 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]14191420nixbot/migrations.py:67: MigrationError1421_______________ ERROR at setup of test_edited_migration_rejected _______________1422[gw9] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1414231424self = <Coroutine test_edited_migration_rejected>14251426 def setup(self) -> None:1427 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1428 if runner_fixture_id not in self.fixturenames:1429 self.fixturenames.append(runner_fixture_id)1430 # When loop factories are configured, resolve the loop factory1431 # fixture early so that a factory variant change cascades cache1432 # invalidation before any async fixture checks its cache.1433 hook_caller = self.config.hook.pytest_asyncio_loop_factories1434 if hook_caller.get_hookimpls():1435 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1436> return super().setup()1437 ^^^^^^^^^^^^^^^14381439/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1440_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1441nixbot/tests/conftest.py:33: in postgres_dsn1442 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1443 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1444/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1445 return next(self.gen)1446 ^^^^^^^^^^^^^^1447nixbot/tests/support.py:327: in ephemeral_postgres1448 run_sync(apply_migrations(dsn))1449nixbot/tests/support.py:285: in run_sync1450 return executor.submit(asyncio.run, coro).result(timeout=120)1451 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1452/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1453 return self.__get_result()1454 ^^^^^^^^^^^^^^^^^^^1455/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1456 raise self._exception1457/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1458 result = ctx.run(self.task)1459 ^^^^^^^^^^^^^^^^^^1460/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1461 return fn(*args, **kwargs)1462 ^^^^^^^^^^^^^^^^^^^1463/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1464 return runner.run(main)1465 ^^^^^^^^^^^^^^^^1466/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1467 return self._loop.run_until_complete(task)1468 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1469/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1470 return future.result()1471 ^^^^^^^^^^^^^^^1472nixbot/migrations.py:99: in apply_migrations1473 migrations = load_migrations()1474 ^^^^^^^^^^^^^^^^^1475_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 14761477 def load_migrations() -> list[Migration]:1478 """Load migration scripts shipped with the package, ordered by version."""1479 migrations = []1480 for entry in resources.files(__package__).joinpath("migrations").iterdir():1481 m = _SCRIPT_RE.match(entry.name)1482 if m is None:1483 continue1484 migrations.append(1485 Migration(1486 version=int(m.group(1)),1487 name=m.group(2),1488 sql=entry.read_text(),1489 )1490 )1491 migrations.sort(key=lambda mig: mig.version)1492 versions = [m.version for m in migrations]1493 if len(set(versions)) != len(versions):1494 msg = f"Duplicate migration versions: {versions}"1495> raise MigrationError(msg)1496E 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]14971498nixbot/migrations.py:67: MigrationError1499_____________ ERROR at setup of test_pr_author_can_control_own_pr ______________1500[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1415011502request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>1503tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all')15041505 @pytest.fixture(scope="module")1506 def postgres_dsn(1507 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1508 ) -> Iterator[str]:1509 if shutil.which("initdb") is None:1510 pytest.skip("postgresql not available")1511 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1512> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1513 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^15141515nixbot/tests/conftest.py:33: 1516_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1517/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1518 return next(self.gen)1519 ^^^^^^^^^^^^^^1520nixbot/tests/support.py:327: in ephemeral_postgres1521 run_sync(apply_migrations(dsn))1522nixbot/tests/support.py:285: in run_sync1523 return executor.submit(asyncio.run, coro).result(timeout=120)1524 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1525/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1526 return self.__get_result()1527 ^^^^^^^^^^^^^^^^^^^1528/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1529 raise self._exception1530/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1531 result = ctx.run(self.task)1532 ^^^^^^^^^^^^^^^^^^1533/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1534 return fn(*args, **kwargs)1535 ^^^^^^^^^^^^^^^^^^^1536/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1537 return runner.run(main)1538 ^^^^^^^^^^^^^^^^1539/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1540 return self._loop.run_until_complete(task)1541 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1542/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1543 return future.result()1544 ^^^^^^^^^^^^^^^1545nixbot/migrations.py:99: in apply_migrations1546 migrations = load_migrations()1547 ^^^^^^^^^^^^^^^^^1548_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15491550 def load_migrations() -> list[Migration]:1551 """Load migration scripts shipped with the package, ordered by version."""1552 migrations = []1553 for entry in resources.files(__package__).joinpath("migrations").iterdir():1554 m = _SCRIPT_RE.match(entry.name)1555 if m is None:1556 continue1557 migrations.append(1558 Migration(1559 version=int(m.group(1)),1560 name=m.group(2),1561 sql=entry.read_text(),1562 )1563 )1564 migrations.sort(key=lambda mig: mig.version)1565 versions = [m.version for m in migrations]1566 if len(set(versions)) != len(versions):1567 msg = f"Duplicate migration versions: {versions}"1568> raise MigrationError(msg)1569E 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]15701571nixbot/migrations.py:67: MigrationError1572______________ ERROR at setup of test_anonymous_sees_public_only _______________1573[gw6] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1415741575fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>1576request = <SubRequest 'postgres_dsn' for <Function test_anonymous_sees_public_only>>15771578 @pytest.hookimpl(wrapper=True)1579 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:1580 if (1581 fixturedef.argname == "event_loop_policy"1582 and fixturedef.func.__module__ != __name__1583 ):1584 warnings.warn(1585 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),1586 )1587 asyncio_mode = _get_asyncio_mode(request.config)1588 if not _is_asyncio_fixture_function(fixturedef.func):1589 if asyncio_mode == Mode.STRICT:1590 # Ignore async fixtures without explicit asyncio mark in strict mode1591 # This applies to pytest_trio fixtures, for example1592 return (yield)1593 if not _is_coroutine_or_asyncgen(fixturedef.func):1594> return (yield)1595 ^^^^^15961597/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 1598_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1599nixbot/tests/conftest.py:33: in postgres_dsn1600 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1601 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1602/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1603 return next(self.gen)1604 ^^^^^^^^^^^^^^1605nixbot/tests/support.py:327: in ephemeral_postgres1606 run_sync(apply_migrations(dsn))1607nixbot/tests/support.py:285: in run_sync1608 return executor.submit(asyncio.run, coro).result(timeout=120)1609 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1610/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1611 return self.__get_result()1612 ^^^^^^^^^^^^^^^^^^^1613/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1614 raise self._exception1615/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1616 result = ctx.run(self.task)1617 ^^^^^^^^^^^^^^^^^^1618/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1619 return fn(*args, **kwargs)1620 ^^^^^^^^^^^^^^^^^^^1621/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1622 return runner.run(main)1623 ^^^^^^^^^^^^^^^^1624/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1625 return self._loop.run_until_complete(task)1626 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1627/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1628 return future.result()1629 ^^^^^^^^^^^^^^^1630nixbot/migrations.py:99: in apply_migrations1631 migrations = load_migrations()1632 ^^^^^^^^^^^^^^^^^1633_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 16341635 def load_migrations() -> list[Migration]:1636 """Load migration scripts shipped with the package, ordered by version."""1637 migrations = []1638 for entry in resources.files(__package__).joinpath("migrations").iterdir():1639 m = _SCRIPT_RE.match(entry.name)1640 if m is None:1641 continue1642 migrations.append(1643 Migration(1644 version=int(m.group(1)),1645 name=m.group(2),1646 sql=entry.read_text(),1647 )1648 )1649 migrations.sort(key=lambda mig: mig.version)1650 versions = [m.version for m in migrations]1651 if len(set(versions)) != len(versions):1652 msg = f"Duplicate migration versions: {versions}"1653> raise MigrationError(msg)1654E 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]16551656nixbot/migrations.py:67: MigrationError1657____________________ ERROR at setup of test_tree_hash_reuse ____________________1658[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1416591660self = <Coroutine test_tree_hash_reuse>16611662 def setup(self) -> None:1663 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1664 if runner_fixture_id not in self.fixturenames:1665 self.fixturenames.append(runner_fixture_id)1666 # When loop factories are configured, resolve the loop factory1667 # fixture early so that a factory variant change cascades cache1668 # invalidation before any async fixture checks its cache.1669 hook_caller = self.config.hook.pytest_asyncio_loop_factories1670 if hook_caller.get_hookimpls():1671 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1672> return super().setup()1673 ^^^^^^^^^^^^^^^16741675/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1676_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1677nixbot/tests/conftest.py:33: in postgres_dsn1678 with ephemeral_postgres(tmp_path_factory, dbname) as dsn: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_legacy_import_scopes_topics_per_forge _________1736[gw5] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1417371738self = <Coroutine test_legacy_import_scopes_topics_per_forge>17391740 def setup(self) -> None:1741 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1742 if runner_fixture_id not in self.fixturenames:1743 self.fixturenames.append(runner_fixture_id)1744 # When loop factories are configured, resolve the loop factory1745 # fixture early so that a factory variant change cascades cache1746 # invalidation before any async fixture checks its cache.1747 hook_caller = self.config.hook.pytest_asyncio_loop_factories1748 if hook_caller.get_hookimpls():1749 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1750> return super().setup()1751 ^^^^^^^^^^^^^^^17521753/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1754_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1755nixbot/tests/conftest.py:33: in postgres_dsn1756 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1757 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1758/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1759 return next(self.gen)1760 ^^^^^^^^^^^^^^1761nixbot/tests/support.py:327: in ephemeral_postgres1762 run_sync(apply_migrations(dsn))1763nixbot/tests/support.py:285: in run_sync1764 return executor.submit(asyncio.run, coro).result(timeout=120)1765 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1766/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1767 return self.__get_result()1768 ^^^^^^^^^^^^^^^^^^^1769/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1770 raise self._exception1771/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1772 result = ctx.run(self.task)1773 ^^^^^^^^^^^^^^^^^^1774/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1775 return fn(*args, **kwargs)1776 ^^^^^^^^^^^^^^^^^^^1777/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1778 return runner.run(main)1779 ^^^^^^^^^^^^^^^^1780/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1781 return self._loop.run_until_complete(task)1782 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1783/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1784 return future.result()1785 ^^^^^^^^^^^^^^^1786nixbot/migrations.py:99: in apply_migrations1787 migrations = load_migrations()1788 ^^^^^^^^^^^^^^^^^1789_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 17901791 def load_migrations() -> list[Migration]:1792 """Load migration scripts shipped with the package, ordered by version."""1793 migrations = []1794 for entry in resources.files(__package__).joinpath("migrations").iterdir():1795 m = _SCRIPT_RE.match(entry.name)1796 if m is None:1797 continue1798 migrations.append(1799 Migration(1800 version=int(m.group(1)),1801 name=m.group(2),1802 sql=entry.read_text(),1803 )1804 )1805 migrations.sort(key=lambda mig: mig.version)1806 versions = [m.version for m in migrations]1807 if len(set(versions)) != len(versions):1808 msg = f"Duplicate migration versions: {versions}"1809> raise MigrationError(msg)1810E 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]18111812nixbot/migrations.py:67: MigrationError1813___________________ ERROR at setup of test_status_badge_urls ___________________1814[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1418151816request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>1817tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')18181819 @pytest.fixture(scope="module")1820 def postgres_dsn(1821 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1822 ) -> Iterator[str]:1823 if shutil.which("initdb") is None:1824 pytest.skip("postgresql not available")1825 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1826> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1827 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^18281829nixbot/tests/conftest.py:33: 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_repo_writer_can_control_without_admin_or_authorship __1887[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1418881889request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>1890tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all')18911892 @pytest.fixture(scope="module")1893 def postgres_dsn(1894 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1895 ) -> Iterator[str]:1896 if shutil.which("initdb") is None:1897 pytest.skip("postgresql not available")1898 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1899> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1900 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^19011902nixbot/tests/conftest.py:33: 1903_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1904/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1905 return next(self.gen)1906 ^^^^^^^^^^^^^^1907nixbot/tests/support.py:327: in ephemeral_postgres1908 run_sync(apply_migrations(dsn))1909nixbot/tests/support.py:285: in run_sync1910 return executor.submit(asyncio.run, coro).result(timeout=120)1911 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1912/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1913 return self.__get_result()1914 ^^^^^^^^^^^^^^^^^^^1915/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1916 raise self._exception1917/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1918 result = ctx.run(self.task)1919 ^^^^^^^^^^^^^^^^^^1920/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1921 return fn(*args, **kwargs)1922 ^^^^^^^^^^^^^^^^^^^1923/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1924 return runner.run(main)1925 ^^^^^^^^^^^^^^^^1926/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1927 return self._loop.run_until_complete(task)1928 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1929/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1930 return future.result()1931 ^^^^^^^^^^^^^^^1932nixbot/migrations.py:99: in apply_migrations1933 migrations = load_migrations()1934 ^^^^^^^^^^^^^^^^^1935_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 19361937 def load_migrations() -> list[Migration]:1938 """Load migration scripts shipped with the package, ordered by version."""1939 migrations = []1940 for entry in resources.files(__package__).joinpath("migrations").iterdir():1941 m = _SCRIPT_RE.match(entry.name)1942 if m is None:1943 continue1944 migrations.append(1945 Migration(1946 version=int(m.group(1)),1947 name=m.group(2),1948 sql=entry.read_text(),1949 )1950 )1951 migrations.sort(key=lambda mig: mig.version)1952 versions = [m.version for m in migrations]1953 if len(set(versions)) != len(versions):1954 msg = f"Duplicate migration versions: {versions}"1955> raise MigrationError(msg)1956E 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]19571958nixbot/migrations.py:67: MigrationError1959____________ ERROR at setup of test_aclose_cancels_in_flight_tasks _____________1960[gw7] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1419611962self = <Coroutine test_aclose_cancels_in_flight_tasks>19631964 def setup(self) -> None:1965 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1966 if runner_fixture_id not in self.fixturenames:1967 self.fixturenames.append(runner_fixture_id)1968 # When loop factories are configured, resolve the loop factory1969 # fixture early so that a factory variant change cascades cache1970 # invalidation before any async fixture checks its cache.1971 hook_caller = self.config.hook.pytest_asyncio_loop_factories1972 if hook_caller.get_hookimpls():1973 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1974> return super().setup()1975 ^^^^^^^^^^^^^^^19761977/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1978_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1979nixbot/tests/conftest.py:33: in postgres_dsn1980 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1981 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1982/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1983 return next(self.gen)1984 ^^^^^^^^^^^^^^1985nixbot/tests/support.py:327: in ephemeral_postgres1986 run_sync(apply_migrations(dsn))1987nixbot/tests/support.py:285: in run_sync1988 return executor.submit(asyncio.run, coro).result(timeout=120)1989 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1990/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1991 return self.__get_result()1992 ^^^^^^^^^^^^^^^^^^^1993/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1994 raise self._exception1995/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1996 result = ctx.run(self.task)1997 ^^^^^^^^^^^^^^^^^^1998/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1999 return fn(*args, **kwargs)2000 ^^^^^^^^^^^^^^^^^^^22564nixbot/migrations.py:67: MigrationError22565_______ ERROR at setup of test_effects_phase_error_keeps_succeeded_build _______22566[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142256722568self = <Coroutine test_effects_phase_error_keeps_succeeded_build>2256922570 def setup(self) -> None:22571 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"22572 if runner_fixture_id not in self.fixturenames:22573 self.fixturenames.append(runner_fixture_id)22574 # When loop factories are configured, resolve the loop factory22575 # fixture early so that a factory variant change cascades cache22576 # invalidation before any async fixture checks its cache.22577 hook_caller = self.config.hook.pytest_asyncio_loop_factories22578 if hook_caller.get_hookimpls():22579 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)22580> return super().setup()22581 ^^^^^^^^^^^^^^^2258222583/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 22584_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22585nixbot/tests/conftest.py:33: in postgres_dsn22586 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22587 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22588/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22589 return next(self.gen)22590 ^^^^^^^^^^^^^^22591nixbot/tests/support.py:327: in ephemeral_postgres22592 run_sync(apply_migrations(dsn))22593nixbot/tests/support.py:285: in run_sync22594 return executor.submit(asyncio.run, coro).result(timeout=120)22595 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22596/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22597 return self.__get_result()22598 ^^^^^^^^^^^^^^^^^^^22599/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22600 raise self._exception22601/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22602 result = ctx.run(self.task)22603 ^^^^^^^^^^^^^^^^^^22604/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22605 return fn(*args, **kwargs)22606 ^^^^^^^^^^^^^^^^^^^22607/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22608 return runner.run(main)22609 ^^^^^^^^^^^^^^^^22610/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22611 return self._loop.run_until_complete(task)22612 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22613/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22614 return future.result()22615 ^^^^^^^^^^^^^^^22616nixbot/migrations.py:99: in apply_migrations22617 migrations = load_migrations()22618 ^^^^^^^^^^^^^^^^^22619_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2262022621 def load_migrations() -> list[Migration]:22622 """Load migration scripts shipped with the package, ordered by version."""22623 migrations = []22624 for entry in resources.files(__package__).joinpath("migrations").iterdir():22625 m = _SCRIPT_RE.match(entry.name)22626 if m is None:22627 continue22628 migrations.append(22629 Migration(22630 version=int(m.group(1)),22631 name=m.group(2),22632 sql=entry.read_text(),22633 )22634 )22635 migrations.sort(key=lambda mig: mig.version)22636 versions = [m.version for m in migrations]22637 if len(set(versions)) != len(versions):22638 msg = f"Duplicate migration versions: {versions}"22639> raise MigrationError(msg)22640E 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]2264122642nixbot/migrations.py:67: MigrationError22643_____________ ERROR at setup of test_parse_path_info_both_formats ______________22644[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142264522646request = <SubRequest 'postgres_dsn' for <Function test_chunk_args_splits_on_byte_limit>>22647tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all')2264822649 @pytest.fixture(scope="module")22650 def postgres_dsn(22651 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory22652 ) -> Iterator[str]:22653 if shutil.which("initdb") is None:22654 pytest.skip("postgresql not available")22655 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")22656> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22657 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2265822659nixbot/tests/conftest.py:33: 22660_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22661/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22662 return next(self.gen)22663 ^^^^^^^^^^^^^^22664nixbot/tests/support.py:327: in ephemeral_postgres22665 run_sync(apply_migrations(dsn))22666nixbot/tests/support.py:285: in run_sync22667 return executor.submit(asyncio.run, coro).result(timeout=120)22668 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22669/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22670 return self.__get_result()22671 ^^^^^^^^^^^^^^^^^^^22672/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22673 raise self._exception22674/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22675 result = ctx.run(self.task)22676 ^^^^^^^^^^^^^^^^^^22677/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22678 return fn(*args, **kwargs)22679 ^^^^^^^^^^^^^^^^^^^22680/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22681 return runner.run(main)22682 ^^^^^^^^^^^^^^^^22683/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22684 return self._loop.run_until_complete(task)22685 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22686/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22687 return future.result()22688 ^^^^^^^^^^^^^^^22689nixbot/migrations.py:99: in apply_migrations22690 migrations = load_migrations()22691 ^^^^^^^^^^^^^^^^^22692_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2269322694 def load_migrations() -> list[Migration]:22695 """Load migration scripts shipped with the package, ordered by version."""22696 migrations = []22697 for entry in resources.files(__package__).joinpath("migrations").iterdir():22698 m = _SCRIPT_RE.match(entry.name)22699 if m is None:22700 continue22701 migrations.append(22702 Migration(22703 version=int(m.group(1)),22704 name=m.group(2),22705 sql=entry.read_text(),22706 )22707 )22708 migrations.sort(key=lambda mig: mig.version)22709 versions = [m.version for m in migrations]22710 if len(set(versions)) != len(versions):22711 msg = f"Duplicate migration versions: {versions}"22712> raise MigrationError(msg)22713E 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]2271422715nixbot/migrations.py:67: MigrationError22716___________ ERROR at setup of test_scheduled_run_viewer_renders_ansi ___________22717[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142271822719request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>22720tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2272122722 @pytest.fixture(scope="module")22723 def postgres_dsn(22724 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory22725 ) -> Iterator[str]:22726 if shutil.which("initdb") is None:22727 pytest.skip("postgresql not available")22728 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")22729> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22730 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2273122732nixbot/tests/conftest.py:33: 22733_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22734/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22735 return next(self.gen)22736 ^^^^^^^^^^^^^^22737nixbot/tests/support.py:327: in ephemeral_postgres22738 run_sync(apply_migrations(dsn))22739nixbot/tests/support.py:285: in run_sync22740 return executor.submit(asyncio.run, coro).result(timeout=120)22741 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22742/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22743 return self.__get_result()22744 ^^^^^^^^^^^^^^^^^^^22745/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22746 raise self._exception22747/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22748 result = ctx.run(self.task)22749 ^^^^^^^^^^^^^^^^^^22750/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22751 return fn(*args, **kwargs)22752 ^^^^^^^^^^^^^^^^^^^22753/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22754 return runner.run(main)22755 ^^^^^^^^^^^^^^^^22756/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22757 return self._loop.run_until_complete(task)22758 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22759/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22760 return future.result()22761 ^^^^^^^^^^^^^^^22762nixbot/migrations.py:99: in apply_migrations22763 migrations = load_migrations()22764 ^^^^^^^^^^^^^^^^^22765_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2276622767 def load_migrations() -> list[Migration]:22768 """Load migration scripts shipped with the package, ordered by version."""22769 migrations = []22770 for entry in resources.files(__package__).joinpath("migrations").iterdir():22771 m = _SCRIPT_RE.match(entry.name)22772 if m is None:22773 continue22774 migrations.append(22775 Migration(22776 version=int(m.group(1)),22777 name=m.group(2),22778 sql=entry.read_text(),22779 )22780 )22781 migrations.sort(key=lambda mig: mig.version)22782 versions = [m.version for m in migrations]22783 if len(set(versions)) != len(versions):22784 msg = f"Duplicate migration versions: {versions}"22785> raise MigrationError(msg)22786E 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]2278722788nixbot/migrations.py:67: MigrationError22789_____ ERROR at setup of test_reuse_post_process_error_still_reports_status _____22790[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142279122792self = <Coroutine test_reuse_post_process_error_still_reports_status>2279322794 def setup(self) -> None:22795 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"22796 if runner_fixture_id not in self.fixturenames:22797 self.fixturenames.append(runner_fixture_id)22798 # When loop factories are configured, resolve the loop factory22799 # fixture early so that a factory variant change cascades cache22800 # invalidation before any async fixture checks its cache.22801 hook_caller = self.config.hook.pytest_asyncio_loop_factories22802 if hook_caller.get_hookimpls():22803 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)22804> return super().setup()22805 ^^^^^^^^^^^^^^^2280622807/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 22808_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22809nixbot/tests/conftest.py:33: in postgres_dsn22810 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22811 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22812/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22813 return next(self.gen)22814 ^^^^^^^^^^^^^^22815nixbot/tests/support.py:327: in ephemeral_postgres22816 run_sync(apply_migrations(dsn))22817nixbot/tests/support.py:285: in run_sync22818 return executor.submit(asyncio.run, coro).result(timeout=120)22819 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22820/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22821 return self.__get_result()22822 ^^^^^^^^^^^^^^^^^^^22823/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22824 raise self._exception22825/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22826 result = ctx.run(self.task)22827 ^^^^^^^^^^^^^^^^^^22828/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22829 return fn(*args, **kwargs)22830 ^^^^^^^^^^^^^^^^^^^22831/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22832 return runner.run(main)22833 ^^^^^^^^^^^^^^^^22834/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22835 return self._loop.run_until_complete(task)22836 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22837/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22838 return future.result()22839 ^^^^^^^^^^^^^^^22840nixbot/migrations.py:99: in apply_migrations22841 migrations = load_migrations()22842 ^^^^^^^^^^^^^^^^^22843_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2284422845 def load_migrations() -> list[Migration]:22846 """Load migration scripts shipped with the package, ordered by version."""22847 migrations = []22848 for entry in resources.files(__package__).joinpath("migrations").iterdir():22849 m = _SCRIPT_RE.match(entry.name)22850 if m is None:22851 continue22852 migrations.append(22853 Migration(22854 version=int(m.group(1)),22855 name=m.group(2),22856 sql=entry.read_text(),22857 )22858 )22859 migrations.sort(key=lambda mig: mig.version)22860 versions = [m.version for m in migrations]22861 if len(set(versions)) != len(versions):22862 msg = f"Duplicate migration versions: {versions}"22863> raise MigrationError(msg)22864E 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]2286522866nixbot/migrations.py:67: MigrationError22867________ ERROR at setup of test_scheduled_run_viewer_cross_project_404 _________22868[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142286922870request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>22871tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2287222873 @pytest.fixture(scope="module")22874 def postgres_dsn(22875 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory22876 ) -> Iterator[str]:22877 if shutil.which("initdb") is None:22878 pytest.skip("postgresql not available")22879 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")22880> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22881 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2288222883nixbot/tests/conftest.py:33: 22884_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22885/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22886 return next(self.gen)22887 ^^^^^^^^^^^^^^22888nixbot/tests/support.py:327: in ephemeral_postgres22889 run_sync(apply_migrations(dsn))22890nixbot/tests/support.py:285: in run_sync22891 return executor.submit(asyncio.run, coro).result(timeout=120)22892 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22893/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22894 return self.__get_result()22895 ^^^^^^^^^^^^^^^^^^^22896/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22897 raise self._exception22898/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22899 result = ctx.run(self.task)22900 ^^^^^^^^^^^^^^^^^^22901/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22902 return fn(*args, **kwargs)22903 ^^^^^^^^^^^^^^^^^^^22904/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22905 return runner.run(main)22906 ^^^^^^^^^^^^^^^^22907/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22908 return self._loop.run_until_complete(task)22909 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22910/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22911 return future.result()22912 ^^^^^^^^^^^^^^^22913nixbot/migrations.py:99: in apply_migrations22914 migrations = load_migrations()22915 ^^^^^^^^^^^^^^^^^22916_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2291722918 def load_migrations() -> list[Migration]:22919 """Load migration scripts shipped with the package, ordered by version."""22920 migrations = []22921 for entry in resources.files(__package__).joinpath("migrations").iterdir():22922 m = _SCRIPT_RE.match(entry.name)22923 if m is None:22924 continue22925 migrations.append(22926 Migration(22927 version=int(m.group(1)),22928 name=m.group(2),22929 sql=entry.read_text(),22930 )22931 )22932 migrations.sort(key=lambda mig: mig.version)22933 versions = [m.version for m in migrations]22934 if len(set(versions)) != len(versions):22935 msg = f"Duplicate migration versions: {versions}"22936> raise MigrationError(msg)22937E 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]2293822939nixbot/migrations.py:67: MigrationError22940_________ ERROR at setup of test_final_upload_reports_and_clears_queue _________22941[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142294222943self = <Coroutine test_final_upload_reports_and_clears_queue>2294422945 def setup(self) -> None:22946 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"22947 if runner_fixture_id not in self.fixturenames:22948 self.fixturenames.append(runner_fixture_id)22949 # When loop factories are configured, resolve the loop factory22950 # fixture early so that a factory variant change cascades cache22951 # invalidation before any async fixture checks its cache.22952 hook_caller = self.config.hook.pytest_asyncio_loop_factories22953 if hook_caller.get_hookimpls():22954 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)22955> return super().setup()22956 ^^^^^^^^^^^^^^^2295722958/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 22959_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22960nixbot/tests/conftest.py:33: in postgres_dsn22961 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22962 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22963/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22964 return next(self.gen)22965 ^^^^^^^^^^^^^^22966nixbot/tests/support.py:327: in ephemeral_postgres22967 run_sync(apply_migrations(dsn))22968nixbot/tests/support.py:285: in run_sync22969 return executor.submit(asyncio.run, coro).result(timeout=120)22970 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22971/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22972 return self.__get_result()22973 ^^^^^^^^^^^^^^^^^^^22974/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22975 raise self._exception22976/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22977 result = ctx.run(self.task)22978 ^^^^^^^^^^^^^^^^^^22979/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22980 return fn(*args, **kwargs)22981 ^^^^^^^^^^^^^^^^^^^22982/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22983 return runner.run(main)22984 ^^^^^^^^^^^^^^^^22985/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22986 return self._loop.run_until_complete(task)22987 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22988/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22989 return future.result()22990 ^^^^^^^^^^^^^^^22991nixbot/migrations.py:99: in apply_migrations22992 migrations = load_migrations()22993 ^^^^^^^^^^^^^^^^^22994_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2299522996 def load_migrations() -> list[Migration]:22997 """Load migration scripts shipped with the package, ordered by version."""22998 migrations = []22999 for entry in resources.files(__package__).joinpath("migrations").iterdir():23000 m = _SCRIPT_RE.match(entry.name)23001 if m is None:23002 continue23003 migrations.append(23004 Migration(23005 version=int(m.group(1)),23006 name=m.group(2),23007 sql=entry.read_text(),23008 )23009 )23010 migrations.sort(key=lambda mig: mig.version)23011 versions = [m.version for m in migrations]23012 if len(set(versions)) != len(versions):23013 msg = f"Duplicate migration versions: {versions}"23014> raise MigrationError(msg)23015E 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]2301623017nixbot/migrations.py:67: MigrationError23018_______ ERROR at setup of test_scheduled_run_log_unavailable_placeholder _______23019[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142302023021request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23022tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2302323024 @pytest.fixture(scope="module")23025 def postgres_dsn(23026 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23027 ) -> Iterator[str]:23028 if shutil.which("initdb") is None:23029 pytest.skip("postgresql not available")23030 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23031> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23032 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2303323034nixbot/tests/conftest.py:33: 23035_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23036/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23037 return next(self.gen)23038 ^^^^^^^^^^^^^^23039nixbot/tests/support.py:327: in ephemeral_postgres23040 run_sync(apply_migrations(dsn))23041nixbot/tests/support.py:285: in run_sync23042 return executor.submit(asyncio.run, coro).result(timeout=120)23043 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23044/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23045 return self.__get_result()23046 ^^^^^^^^^^^^^^^^^^^23047/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23048 raise self._exception23049/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23050 result = ctx.run(self.task)23051 ^^^^^^^^^^^^^^^^^^23052/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23053 return fn(*args, **kwargs)23054 ^^^^^^^^^^^^^^^^^^^23055/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23056 return runner.run(main)23057 ^^^^^^^^^^^^^^^^23058/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23059 return self._loop.run_until_complete(task)23060 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23061/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23062 return future.result()23063 ^^^^^^^^^^^^^^^23064nixbot/migrations.py:99: in apply_migrations23065 migrations = load_migrations()23066 ^^^^^^^^^^^^^^^^^23067_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2306823069 def load_migrations() -> list[Migration]:23070 """Load migration scripts shipped with the package, ordered by version."""23071 migrations = []23072 for entry in resources.files(__package__).joinpath("migrations").iterdir():23073 m = _SCRIPT_RE.match(entry.name)23074 if m is None:23075 continue23076 migrations.append(23077 Migration(23078 version=int(m.group(1)),23079 name=m.group(2),23080 sql=entry.read_text(),23081 )23082 )23083 migrations.sort(key=lambda mig: mig.version)23084 versions = [m.version for m in migrations]23085 if len(set(versions)) != len(versions):23086 msg = f"Duplicate migration versions: {versions}"23087> raise MigrationError(msg)23088E 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]2308923090nixbot/migrations.py:67: MigrationError23091____ ERROR at setup of test_reuse_with_missing_output_still_post_processes _____23092[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142309323094self = <Coroutine test_reuse_with_missing_output_still_post_processes>2309523096 def setup(self) -> None:23097 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23098 if runner_fixture_id not in self.fixturenames:23099 self.fixturenames.append(runner_fixture_id)23100 # When loop factories are configured, resolve the loop factory23101 # fixture early so that a factory variant change cascades cache23102 # invalidation before any async fixture checks its cache.23103 hook_caller = self.config.hook.pytest_asyncio_loop_factories23104 if hook_caller.get_hookimpls():23105 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23106> return super().setup()23107 ^^^^^^^^^^^^^^^2310823109/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23110_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23111nixbot/tests/conftest.py:33: in postgres_dsn23112 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23113 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23114/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23115 return next(self.gen)23116 ^^^^^^^^^^^^^^23117nixbot/tests/support.py:327: in ephemeral_postgres23118 run_sync(apply_migrations(dsn))23119nixbot/tests/support.py:285: in run_sync23120 return executor.submit(asyncio.run, coro).result(timeout=120)23121 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23122/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23123 return self.__get_result()23124 ^^^^^^^^^^^^^^^^^^^23125/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23126 raise self._exception23127/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23128 result = ctx.run(self.task)23129 ^^^^^^^^^^^^^^^^^^23130/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23131 return fn(*args, **kwargs)23132 ^^^^^^^^^^^^^^^^^^^23133/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23134 return runner.run(main)23135 ^^^^^^^^^^^^^^^^23136/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23137 return self._loop.run_until_complete(task)23138 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23139/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23140 return future.result()23141 ^^^^^^^^^^^^^^^23142nixbot/migrations.py:99: in apply_migrations23143 migrations = load_migrations()23144 ^^^^^^^^^^^^^^^^^23145_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2314623147 def load_migrations() -> list[Migration]:23148 """Load migration scripts shipped with the package, ordered by version."""23149 migrations = []23150 for entry in resources.files(__package__).joinpath("migrations").iterdir():23151 m = _SCRIPT_RE.match(entry.name)23152 if m is None:23153 continue23154 migrations.append(23155 Migration(23156 version=int(m.group(1)),23157 name=m.group(2),23158 sql=entry.read_text(),23159 )23160 )23161 migrations.sort(key=lambda mig: mig.version)23162 versions = [m.version for m in migrations]23163 if len(set(versions)) != len(versions):23164 msg = f"Duplicate migration versions: {versions}"23165> raise MigrationError(msg)23166E 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]2316723168nixbot/migrations.py:67: MigrationError23169____ ERROR at setup of test_intermediates_batch_with_final_and_drop_invalid ____23170[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142317123172self = <Coroutine test_intermediates_batch_with_final_and_drop_invalid>2317323174 def setup(self) -> None:23175 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23176 if runner_fixture_id not in self.fixturenames:23177 self.fixturenames.append(runner_fixture_id)23178 # When loop factories are configured, resolve the loop factory23179 # fixture early so that a factory variant change cascades cache23180 # invalidation before any async fixture checks its cache.23181 hook_caller = self.config.hook.pytest_asyncio_loop_factories23182 if hook_caller.get_hookimpls():23183 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23184> return super().setup()23185 ^^^^^^^^^^^^^^^2318623187/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23188_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23189nixbot/tests/conftest.py:33: in postgres_dsn23190 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23191 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23192/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23193 return next(self.gen)23194 ^^^^^^^^^^^^^^23195nixbot/tests/support.py:327: in ephemeral_postgres23196 run_sync(apply_migrations(dsn))23197nixbot/tests/support.py:285: in run_sync23198 return executor.submit(asyncio.run, coro).result(timeout=120)23199 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23200/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23201 return self.__get_result()23202 ^^^^^^^^^^^^^^^^^^^23203/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23204 raise self._exception23205/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23206 result = ctx.run(self.task)23207 ^^^^^^^^^^^^^^^^^^23208/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23209 return fn(*args, **kwargs)23210 ^^^^^^^^^^^^^^^^^^^23211/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23212 return runner.run(main)23213 ^^^^^^^^^^^^^^^^23214/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23215 return self._loop.run_until_complete(task)23216 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23217/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23218 return future.result()23219 ^^^^^^^^^^^^^^^23220nixbot/migrations.py:99: in apply_migrations23221 migrations = load_migrations()23222 ^^^^^^^^^^^^^^^^^23223_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2322423225 def load_migrations() -> list[Migration]:23226 """Load migration scripts shipped with the package, ordered by version."""23227 migrations = []23228 for entry in resources.files(__package__).joinpath("migrations").iterdir():23229 m = _SCRIPT_RE.match(entry.name)23230 if m is None:23231 continue23232 migrations.append(23233 Migration(23234 version=int(m.group(1)),23235 name=m.group(2),23236 sql=entry.read_text(),23237 )23238 )23239 migrations.sort(key=lambda mig: mig.version)23240 versions = [m.version for m in migrations]23241 if len(set(versions)) != len(versions):23242 msg = f"Duplicate migration versions: {versions}"23243> raise MigrationError(msg)23244E 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]2324523246nixbot/migrations.py:67: MigrationError23247________ ERROR at setup of test_scheduled_run_viewer_waiting_before_log ________23248[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142324923250request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23251tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2325223253 @pytest.fixture(scope="module")23254 def postgres_dsn(23255 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23256 ) -> Iterator[str]:23257 if shutil.which("initdb") is None:23258 pytest.skip("postgresql not available")23259 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23260> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23261 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2326223263nixbot/tests/conftest.py:33: 23264_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23265/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23266 return next(self.gen)23267 ^^^^^^^^^^^^^^23268nixbot/tests/support.py:327: in ephemeral_postgres23269 run_sync(apply_migrations(dsn))23270nixbot/tests/support.py:285: in run_sync23271 return executor.submit(asyncio.run, coro).result(timeout=120)23272 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23273/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23274 return self.__get_result()23275 ^^^^^^^^^^^^^^^^^^^23276/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23277 raise self._exception23278/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23279 result = ctx.run(self.task)23280 ^^^^^^^^^^^^^^^^^^23281/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23282 return fn(*args, **kwargs)23283 ^^^^^^^^^^^^^^^^^^^23284/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23285 return runner.run(main)23286 ^^^^^^^^^^^^^^^^23287/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23288 return self._loop.run_until_complete(task)23289 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23290/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23291 return future.result()23292 ^^^^^^^^^^^^^^^23293nixbot/migrations.py:99: in apply_migrations23294 migrations = load_migrations()23295 ^^^^^^^^^^^^^^^^^23296_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2329723298 def load_migrations() -> list[Migration]:23299 """Load migration scripts shipped with the package, ordered by version."""23300 migrations = []23301 for entry in resources.files(__package__).joinpath("migrations").iterdir():23302 m = _SCRIPT_RE.match(entry.name)23303 if m is None:23304 continue23305 migrations.append(23306 Migration(23307 version=int(m.group(1)),23308 name=m.group(2),23309 sql=entry.read_text(),23310 )23311 )23312 migrations.sort(key=lambda mig: mig.version)23313 versions = [m.version for m in migrations]23314 if len(set(versions)) != len(versions):23315 msg = f"Duplicate migration versions: {versions}"23316> raise MigrationError(msg)23317E 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]2331823319nixbot/migrations.py:67: MigrationError23320______________________ ERROR at setup of test_stdin_mode _______________________23321[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142332223323self = <Coroutine test_stdin_mode>2332423325 def setup(self) -> None:23326 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23327 if runner_fixture_id not in self.fixturenames:23328 self.fixturenames.append(runner_fixture_id)23329 # When loop factories are configured, resolve the loop factory23330 # fixture early so that a factory variant change cascades cache23331 # invalidation before any async fixture checks its cache.23332 hook_caller = self.config.hook.pytest_asyncio_loop_factories23333 if hook_caller.get_hookimpls():23334 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23335> return super().setup()23336 ^^^^^^^^^^^^^^^2333723338/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23339_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23340nixbot/tests/conftest.py:33: in postgres_dsn23341 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23342 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23343/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23344 return next(self.gen)23345 ^^^^^^^^^^^^^^23346nixbot/tests/support.py:327: in ephemeral_postgres23347 run_sync(apply_migrations(dsn))23348nixbot/tests/support.py:285: in run_sync23349 return executor.submit(asyncio.run, coro).result(timeout=120)23350 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23351/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23352 return self.__get_result()23353 ^^^^^^^^^^^^^^^^^^^23354/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23355 raise self._exception23356/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23357 result = ctx.run(self.task)23358 ^^^^^^^^^^^^^^^^^^23359/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23360 return fn(*args, **kwargs)23361 ^^^^^^^^^^^^^^^^^^^23362/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23363 return runner.run(main)23364 ^^^^^^^^^^^^^^^^23365/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23366 return self._loop.run_until_complete(task)23367 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23368/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23369 return future.result()23370 ^^^^^^^^^^^^^^^23371nixbot/migrations.py:99: in apply_migrations23372 migrations = load_migrations()23373 ^^^^^^^^^^^^^^^^^23374_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2337523376 def load_migrations() -> list[Migration]:23377 """Load migration scripts shipped with the package, ordered by version."""23378 migrations = []23379 for entry in resources.files(__package__).joinpath("migrations").iterdir():23380 m = _SCRIPT_RE.match(entry.name)23381 if m is None:23382 continue23383 migrations.append(23384 Migration(23385 version=int(m.group(1)),23386 name=m.group(2),23387 sql=entry.read_text(),23388 )23389 )23390 migrations.sort(key=lambda mig: mig.version)23391 versions = [m.version for m in migrations]23392 if len(set(versions)) != len(versions):23393 msg = f"Duplicate migration versions: {versions}"23394> raise MigrationError(msg)23395E 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]2339623397nixbot/migrations.py:67: MigrationError23398___________ ERROR at setup of test_scheduled_run_history_lists_runs ____________23399[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142340023401request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23402tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2340323404 @pytest.fixture(scope="module")23405 def postgres_dsn(23406 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23407 ) -> Iterator[str]:23408 if shutil.which("initdb") is None:23409 pytest.skip("postgresql not available")23410 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23411> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23412 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2341323414nixbot/tests/conftest.py:33: 23415_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23416/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23417 return next(self.gen)23418 ^^^^^^^^^^^^^^23419nixbot/tests/support.py:327: in ephemeral_postgres23420 run_sync(apply_migrations(dsn))23421nixbot/tests/support.py:285: in run_sync23422 return executor.submit(asyncio.run, coro).result(timeout=120)23423 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23424/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23425 return self.__get_result()23426 ^^^^^^^^^^^^^^^^^^^23427/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23428 raise self._exception23429/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23430 result = ctx.run(self.task)23431 ^^^^^^^^^^^^^^^^^^23432/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23433 return fn(*args, **kwargs)23434 ^^^^^^^^^^^^^^^^^^^23435/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23436 return runner.run(main)23437 ^^^^^^^^^^^^^^^^23438/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23439 return self._loop.run_until_complete(task)23440 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23441/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23442 return future.result()23443 ^^^^^^^^^^^^^^^23444nixbot/migrations.py:99: in apply_migrations23445 migrations = load_migrations()23446 ^^^^^^^^^^^^^^^^^23447_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2344823449 def load_migrations() -> list[Migration]:23450 """Load migration scripts shipped with the package, ordered by version."""23451 migrations = []23452 for entry in resources.files(__package__).joinpath("migrations").iterdir():23453 m = _SCRIPT_RE.match(entry.name)23454 if m is None:23455 continue23456 migrations.append(23457 Migration(23458 version=int(m.group(1)),23459 name=m.group(2),23460 sql=entry.read_text(),23461 )23462 )23463 migrations.sort(key=lambda mig: mig.version)23464 versions = [m.version for m in migrations]23465 if len(set(versions)) != len(versions):23466 msg = f"Duplicate migration versions: {versions}"23467> raise MigrationError(msg)23468E 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]2346923470nixbot/migrations.py:67: MigrationError23471_____________ ERROR at setup of test_pending_paths_survive_restart _____________23472[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142347323474self = <Coroutine test_pending_paths_survive_restart>2347523476 def setup(self) -> None:23477 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23478 if runner_fixture_id not in self.fixturenames:23479 self.fixturenames.append(runner_fixture_id)23480 # When loop factories are configured, resolve the loop factory23481 # fixture early so that a factory variant change cascades cache23482 # invalidation before any async fixture checks its cache.23483 hook_caller = self.config.hook.pytest_asyncio_loop_factories23484 if hook_caller.get_hookimpls():23485 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23486> return super().setup()23487 ^^^^^^^^^^^^^^^2348823489/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23490_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23491nixbot/tests/conftest.py:33: in postgres_dsn23492 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23493 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23494/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23495 return next(self.gen)23496 ^^^^^^^^^^^^^^23497nixbot/tests/support.py:327: in ephemeral_postgres23498 run_sync(apply_migrations(dsn))23499nixbot/tests/support.py:285: in run_sync23500 return executor.submit(asyncio.run, coro).result(timeout=120)23501 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23502/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23503 return self.__get_result()23504 ^^^^^^^^^^^^^^^^^^^23505/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23506 raise self._exception23507/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23508 result = ctx.run(self.task)23509 ^^^^^^^^^^^^^^^^^^23510/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23511 return fn(*args, **kwargs)23512 ^^^^^^^^^^^^^^^^^^^23513/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23514 return runner.run(main)23515 ^^^^^^^^^^^^^^^^23516/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23517 return self._loop.run_until_complete(task)23518 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23519/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23520 return future.result()23521 ^^^^^^^^^^^^^^^23522nixbot/migrations.py:99: in apply_migrations23523 migrations = load_migrations()23524 ^^^^^^^^^^^^^^^^^23525_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2352623527 def load_migrations() -> list[Migration]:23528 """Load migration scripts shipped with the package, ordered by version."""23529 migrations = []23530 for entry in resources.files(__package__).joinpath("migrations").iterdir():23531 m = _SCRIPT_RE.match(entry.name)23532 if m is None:23533 continue23534 migrations.append(23535 Migration(23536 version=int(m.group(1)),23537 name=m.group(2),23538 sql=entry.read_text(),23539 )23540 )23541 migrations.sort(key=lambda mig: mig.version)23542 versions = [m.version for m in migrations]23543 if len(set(versions)) != len(versions):23544 msg = f"Duplicate migration versions: {versions}"23545> raise MigrationError(msg)23546E 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]2354723548nixbot/migrations.py:67: MigrationError23549__________ ERROR at setup of test_scheduled_run_history_special_chars __________23550[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142355123552request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23553tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2355423555 @pytest.fixture(scope="module")23556 def postgres_dsn(23557 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23558 ) -> Iterator[str]:23559 if shutil.which("initdb") is None:23560 pytest.skip("postgresql not available")23561 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23562> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23563 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2356423565nixbot/tests/conftest.py:33: 23566_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23567/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23568 return next(self.gen)23569 ^^^^^^^^^^^^^^23570nixbot/tests/support.py:327: in ephemeral_postgres23571 run_sync(apply_migrations(dsn))23572nixbot/tests/support.py:285: in run_sync23573 return executor.submit(asyncio.run, coro).result(timeout=120)23574 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23575/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23576 return self.__get_result()23577 ^^^^^^^^^^^^^^^^^^^23578/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23579 raise self._exception23580/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23581 result = ctx.run(self.task)23582 ^^^^^^^^^^^^^^^^^^23583/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23584 return fn(*args, **kwargs)23585 ^^^^^^^^^^^^^^^^^^^23586/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23587 return runner.run(main)23588 ^^^^^^^^^^^^^^^^23589/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23590 return self._loop.run_until_complete(task)23591 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23592/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23593 return future.result()23594 ^^^^^^^^^^^^^^^23595nixbot/migrations.py:99: in apply_migrations23596 migrations = load_migrations()23597 ^^^^^^^^^^^^^^^^^23598_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2359923600 def load_migrations() -> list[Migration]:23601 """Load migration scripts shipped with the package, ordered by version."""23602 migrations = []23603 for entry in resources.files(__package__).joinpath("migrations").iterdir():23604 m = _SCRIPT_RE.match(entry.name)23605 if m is None:23606 continue23607 migrations.append(23608 Migration(23609 version=int(m.group(1)),23610 name=m.group(2),23611 sql=entry.read_text(),23612 )23613 )23614 migrations.sort(key=lambda mig: mig.version)23615 versions = [m.version for m in migrations]23616 if len(set(versions)) != len(versions):23617 msg = f"Duplicate migration versions: {versions}"23618> raise MigrationError(msg)23619E 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]2362023621nixbot/migrations.py:67: MigrationError23622_____________ ERROR at setup of test_uploader_factory_picks_stream _____________23623[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142362423625request = <SubRequest 'postgres_dsn' for <Function test_chunk_args_splits_on_byte_limit>>23626tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all')2362723628 @pytest.fixture(scope="module")23629 def postgres_dsn(23630 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23631 ) -> Iterator[str]:23632 if shutil.which("initdb") is None:23633 pytest.skip("postgresql not available")23634 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23635> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23636 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2363723638nixbot/tests/conftest.py:33: 23639_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23640/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23641 return next(self.gen)23642 ^^^^^^^^^^^^^^23643nixbot/tests/support.py:327: in ephemeral_postgres23644 run_sync(apply_migrations(dsn))23645nixbot/tests/support.py:285: in run_sync23646 return executor.submit(asyncio.run, coro).result(timeout=120)23647 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23648/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23649 return self.__get_result()23650 ^^^^^^^^^^^^^^^^^^^23651/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23652 raise self._exception23653/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23654 result = ctx.run(self.task)23655 ^^^^^^^^^^^^^^^^^^23656/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23657 return fn(*args, **kwargs)23658 ^^^^^^^^^^^^^^^^^^^23659/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23660 return runner.run(main)23661 ^^^^^^^^^^^^^^^^23662/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23663 return self._loop.run_until_complete(task)23664 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23665/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23666 return future.result()23667 ^^^^^^^^^^^^^^^23668nixbot/migrations.py:99: in apply_migrations23669 migrations = load_migrations()23670 ^^^^^^^^^^^^^^^^^23671_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2367223673 def load_migrations() -> list[Migration]:23674 """Load migration scripts shipped with the package, ordered by version."""23675 migrations = []23676 for entry in resources.files(__package__).joinpath("migrations").iterdir():23677 m = _SCRIPT_RE.match(entry.name)23678 if m is None:23679 continue23680 migrations.append(23681 Migration(23682 version=int(m.group(1)),23683 name=m.group(2),23684 sql=entry.read_text(),23685 )23686 )23687 migrations.sort(key=lambda mig: mig.version)23688 versions = [m.version for m in migrations]23689 if len(set(versions)) != len(versions):23690 msg = f"Duplicate migration versions: {versions}"23691> raise MigrationError(msg)23692E 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]2369323694nixbot/migrations.py:67: MigrationError23695_________ ERROR at setup of test_scheduled_run_stream_replays_history __________23696[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142369723698request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23699tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2370023701 @pytest.fixture(scope="module")23702 def postgres_dsn(23703 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23704 ) -> Iterator[str]:23705 if shutil.which("initdb") is None:23706 pytest.skip("postgresql not available")23707 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23708> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23709 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2371023711nixbot/tests/conftest.py:33: 23712_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23713/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23714 return next(self.gen)23715 ^^^^^^^^^^^^^^23716nixbot/tests/support.py:327: in ephemeral_postgres23717 run_sync(apply_migrations(dsn))23718nixbot/tests/support.py:285: in run_sync23719 return executor.submit(asyncio.run, coro).result(timeout=120)23720 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23721/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23722 return self.__get_result()23723 ^^^^^^^^^^^^^^^^^^^23724/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23725 raise self._exception23726/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23727 result = ctx.run(self.task)23728 ^^^^^^^^^^^^^^^^^^23729/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23730 return fn(*args, **kwargs)23731 ^^^^^^^^^^^^^^^^^^^23732/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23733 return runner.run(main)23734 ^^^^^^^^^^^^^^^^23735/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23736 return self._loop.run_until_complete(task)23737 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23738/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23739 return future.result()23740 ^^^^^^^^^^^^^^^23741nixbot/migrations.py:99: in apply_migrations23742 migrations = load_migrations()23743 ^^^^^^^^^^^^^^^^^23744_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2374523746 def load_migrations() -> list[Migration]:23747 """Load migration scripts shipped with the package, ordered by version."""23748 migrations = []23749 for entry in resources.files(__package__).joinpath("migrations").iterdir():23750 m = _SCRIPT_RE.match(entry.name)23751 if m is None:23752 continue23753 migrations.append(23754 Migration(23755 version=int(m.group(1)),23756 name=m.group(2),23757 sql=entry.read_text(),23758 )23759 )23760 migrations.sort(key=lambda mig: mig.version)23761 versions = [m.version for m in migrations]23762 if len(set(versions)) != len(versions):23763 msg = f"Duplicate migration versions: {versions}"23764> raise MigrationError(msg)23765E 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]2376623767nixbot/migrations.py:67: MigrationError23768_______ ERROR at setup of test_stream_reports_per_path_and_clears_queue ________23769[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142377023771self = <Coroutine test_stream_reports_per_path_and_clears_queue>2377223773 def setup(self) -> None:23774 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23775 if runner_fixture_id not in self.fixturenames:23776 self.fixturenames.append(runner_fixture_id)23777 # When loop factories are configured, resolve the loop factory23778 # fixture early so that a factory variant change cascades cache23779 # invalidation before any async fixture checks its cache.23780 hook_caller = self.config.hook.pytest_asyncio_loop_factories23781 if hook_caller.get_hookimpls():23782 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23783> return super().setup()23784 ^^^^^^^^^^^^^^^2378523786/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23787_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23788nixbot/tests/conftest.py:33: in postgres_dsn23789 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23790 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23791/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23792 return next(self.gen)23793 ^^^^^^^^^^^^^^23794nixbot/tests/support.py:327: in ephemeral_postgres23795 run_sync(apply_migrations(dsn))23796nixbot/tests/support.py:285: in run_sync23797 return executor.submit(asyncio.run, coro).result(timeout=120)23798 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23799/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23800 return self.__get_result()23801 ^^^^^^^^^^^^^^^^^^^23802/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23803 raise self._exception23804/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23805 result = ctx.run(self.task)23806 ^^^^^^^^^^^^^^^^^^23807/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23808 return fn(*args, **kwargs)23809 ^^^^^^^^^^^^^^^^^^^23810/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23811 return runner.run(main)23812 ^^^^^^^^^^^^^^^^23813/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23814 return self._loop.run_until_complete(task)23815 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23816/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23817 return future.result()23818 ^^^^^^^^^^^^^^^23819nixbot/migrations.py:99: in apply_migrations23820 migrations = load_migrations()23821 ^^^^^^^^^^^^^^^^^23822_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2382323824 def load_migrations() -> list[Migration]:23825 """Load migration scripts shipped with the package, ordered by version."""23826 migrations = []23827 for entry in resources.files(__package__).joinpath("migrations").iterdir():23828 m = _SCRIPT_RE.match(entry.name)23829 if m is None:23830 continue23831 migrations.append(23832 Migration(23833 version=int(m.group(1)),23834 name=m.group(2),23835 sql=entry.read_text(),23836 )23837 )23838 migrations.sort(key=lambda mig: mig.version)23839 versions = [m.version for m in migrations]23840 if len(set(versions)) != len(versions):23841 msg = f"Duplicate migration versions: {versions}"23842> raise MigrationError(msg)23843E 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]2384423845nixbot/migrations.py:67: MigrationError23846___________ ERROR at setup of test_scheduled_run_notify_build_events ___________23847[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142384823849request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23850tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2385123852 @pytest.fixture(scope="module")23853 def postgres_dsn(23854 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23855 ) -> Iterator[str]:23856 if shutil.which("initdb") is None:23857 pytest.skip("postgresql not available")23858 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23859> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23860 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2386123862nixbot/tests/conftest.py:33: 23863_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23864/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23865 return next(self.gen)23866 ^^^^^^^^^^^^^^23867nixbot/tests/support.py:327: in ephemeral_postgres23868 run_sync(apply_migrations(dsn))23869nixbot/tests/support.py:285: in run_sync23870 return executor.submit(asyncio.run, coro).result(timeout=120)23871 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23872/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23873 return self.__get_result()23874 ^^^^^^^^^^^^^^^^^^^23875/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23876 raise self._exception23877/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23878 result = ctx.run(self.task)23879 ^^^^^^^^^^^^^^^^^^23880/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23881 return fn(*args, **kwargs)23882 ^^^^^^^^^^^^^^^^^^^23883/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23884 return runner.run(main)23885 ^^^^^^^^^^^^^^^^23886/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23887 return self._loop.run_until_complete(task)23888 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23889/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23890 return future.result()23891 ^^^^^^^^^^^^^^^23892nixbot/migrations.py:99: in apply_migrations23893 migrations = load_migrations()23894 ^^^^^^^^^^^^^^^^^23895_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2389623897 def load_migrations() -> list[Migration]:23898 """Load migration scripts shipped with the package, ordered by version."""23899 migrations = []23900 for entry in resources.files(__package__).joinpath("migrations").iterdir():23901 m = _SCRIPT_RE.match(entry.name)23902 if m is None:23903 continue23904 migrations.append(23905 Migration(23906 version=int(m.group(1)),23907 name=m.group(2),23908 sql=entry.read_text(),23909 )23910 )23911 migrations.sort(key=lambda mig: mig.version)23912 versions = [m.version for m in migrations]23913 if len(set(versions)) != len(versions):23914 msg = f"Duplicate migration versions: {versions}"23915> raise MigrationError(msg)23916E 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]2391723918nixbot/migrations.py:67: MigrationError23919_________________ ERROR at setup of test_api_log_toc_and_text __________________23920[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142392123922request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23923tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2392423925 @pytest.fixture(scope="module")23926 def postgres_dsn(23927 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23928 ) -> Iterator[str]:23929 if shutil.which("initdb") is None:23930 pytest.skip("postgresql not available")23931 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23932> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23933 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2393423935nixbot/tests/conftest.py:33: 23936_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23937/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23938 return next(self.gen)23939 ^^^^^^^^^^^^^^23940nixbot/tests/support.py:327: in ephemeral_postgres23941 run_sync(apply_migrations(dsn))23942nixbot/tests/support.py:285: in run_sync23943 return executor.submit(asyncio.run, coro).result(timeout=120)23944 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23945/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23946 return self.__get_result()23947 ^^^^^^^^^^^^^^^^^^^23948/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23949 raise self._exception23950/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23951 result = ctx.run(self.task)23952 ^^^^^^^^^^^^^^^^^^23953/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23954 return fn(*args, **kwargs)23955 ^^^^^^^^^^^^^^^^^^^23956/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23957 return runner.run(main)23958 ^^^^^^^^^^^^^^^^23959/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23960 return self._loop.run_until_complete(task)23961 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23962/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23963 return future.result()23964 ^^^^^^^^^^^^^^^23965nixbot/migrations.py:99: in apply_migrations23966 migrations = load_migrations()23967 ^^^^^^^^^^^^^^^^^23968_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2396923970 def load_migrations() -> list[Migration]:23971 """Load migration scripts shipped with the package, ordered by version."""23972 migrations = []23973 for entry in resources.files(__package__).joinpath("migrations").iterdir():23974 m = _SCRIPT_RE.match(entry.name)23975 if m is None:23976 continue23977 migrations.append(23978 Migration(23979 version=int(m.group(1)),23980 name=m.group(2),23981 sql=entry.read_text(),23982 )23983 )23984 migrations.sort(key=lambda mig: mig.version)23985 versions = [m.version for m in migrations]23986 if len(set(versions)) != len(versions):23987 msg = f"Duplicate migration versions: {versions}"23988> raise MigrationError(msg)23989E 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]2399023991nixbot/migrations.py:67: MigrationError23992_________ ERROR at setup of test_stream_error_is_reported_with_message _________23993[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142399423995self = <Coroutine test_stream_error_is_reported_with_message>2399623997 def setup(self) -> None:23998 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23999 if runner_fixture_id not in self.fixturenames:24000 self.fixturenames.append(runner_fixture_id)24001 # When loop factories are configured, resolve the loop factory24002 # fixture early so that a factory variant change cascades cache24003 # invalidation before any async fixture checks its cache.24004 hook_caller = self.config.hook.pytest_asyncio_loop_factories24005 if hook_caller.get_hookimpls():24006 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24007> return super().setup()24008 ^^^^^^^^^^^^^^^2400924010/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24011_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24012nixbot/tests/conftest.py:33: in postgres_dsn24013 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24014 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24015/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24016 return next(self.gen)24017 ^^^^^^^^^^^^^^24018nixbot/tests/support.py:327: in ephemeral_postgres24019 run_sync(apply_migrations(dsn))24020nixbot/tests/support.py:285: in run_sync24021 return executor.submit(asyncio.run, coro).result(timeout=120)24022 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24023/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24024 return self.__get_result()24025 ^^^^^^^^^^^^^^^^^^^24026/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24027 raise self._exception24028/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24029 result = ctx.run(self.task)24030 ^^^^^^^^^^^^^^^^^^24031/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24032 return fn(*args, **kwargs)24033 ^^^^^^^^^^^^^^^^^^^24034/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24035 return runner.run(main)24036 ^^^^^^^^^^^^^^^^24037/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24038 return self._loop.run_until_complete(task)24039 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24040/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24041 return future.result()24042 ^^^^^^^^^^^^^^^24043nixbot/migrations.py:99: in apply_migrations24044 migrations = load_migrations()24045 ^^^^^^^^^^^^^^^^^24046_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2404724048 def load_migrations() -> list[Migration]:24049 """Load migration scripts shipped with the package, ordered by version."""24050 migrations = []24051 for entry in resources.files(__package__).joinpath("migrations").iterdir():24052 m = _SCRIPT_RE.match(entry.name)24053 if m is None:24054 continue24055 migrations.append(24056 Migration(24057 version=int(m.group(1)),24058 name=m.group(2),24059 sql=entry.read_text(),24060 )24061 )24062 migrations.sort(key=lambda mig: mig.version)24063 versions = [m.version for m in migrations]24064 if len(set(versions)) != len(versions):24065 msg = f"Duplicate migration versions: {versions}"24066> raise MigrationError(msg)24067E 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]2406824069nixbot/migrations.py:67: MigrationError24070__________ ERROR at setup of test_stream_child_crash_refeeds_pending ___________24071[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142407224073self = <Coroutine test_stream_child_crash_refeeds_pending>2407424075 def setup(self) -> None:24076 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24077 if runner_fixture_id not in self.fixturenames:24078 self.fixturenames.append(runner_fixture_id)24079 # When loop factories are configured, resolve the loop factory24080 # fixture early so that a factory variant change cascades cache24081 # invalidation before any async fixture checks its cache.24082 hook_caller = self.config.hook.pytest_asyncio_loop_factories24083 if hook_caller.get_hookimpls():24084 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24085> return super().setup()24086 ^^^^^^^^^^^^^^^2408724088/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24089_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24090nixbot/tests/conftest.py:33: in postgres_dsn24091 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24092 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24093/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24094 return next(self.gen)24095 ^^^^^^^^^^^^^^24096nixbot/tests/support.py:327: in ephemeral_postgres24097 run_sync(apply_migrations(dsn))24098nixbot/tests/support.py:285: in run_sync24099 return executor.submit(asyncio.run, coro).result(timeout=120)24100 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24101/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24102 return self.__get_result()24103 ^^^^^^^^^^^^^^^^^^^24104/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24105 raise self._exception24106/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24107 result = ctx.run(self.task)24108 ^^^^^^^^^^^^^^^^^^24109/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24110 return fn(*args, **kwargs)24111 ^^^^^^^^^^^^^^^^^^^24112/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24113 return runner.run(main)24114 ^^^^^^^^^^^^^^^^24115/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24116 return self._loop.run_until_complete(task)24117 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24118/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24119 return future.result()24120 ^^^^^^^^^^^^^^^24121nixbot/migrations.py:99: in apply_migrations24122 migrations = load_migrations()24123 ^^^^^^^^^^^^^^^^^24124_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2412524126 def load_migrations() -> list[Migration]:24127 """Load migration scripts shipped with the package, ordered by version."""24128 migrations = []24129 for entry in resources.files(__package__).joinpath("migrations").iterdir():24130 m = _SCRIPT_RE.match(entry.name)24131 if m is None:24132 continue24133 migrations.append(24134 Migration(24135 version=int(m.group(1)),24136 name=m.group(2),24137 sql=entry.read_text(),24138 )24139 )24140 migrations.sort(key=lambda mig: mig.version)24141 versions = [m.version for m in migrations]24142 if len(set(versions)) != len(versions):24143 msg = f"Duplicate migration versions: {versions}"24144> raise MigrationError(msg)24145E 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]2414624147nixbot/migrations.py:67: MigrationError24148_____________ ERROR at setup of test_api_log_toc_flat_log_fallback _____________24149[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142415024151request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24152tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2415324154 @pytest.fixture(scope="module")24155 def postgres_dsn(24156 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24157 ) -> Iterator[str]:24158 if shutil.which("initdb") is None:24159 pytest.skip("postgresql not available")24160 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24161> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24162 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2416324164nixbot/tests/conftest.py:33: 24165_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24166/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24167 return next(self.gen)24168 ^^^^^^^^^^^^^^24169nixbot/tests/support.py:327: in ephemeral_postgres24170 run_sync(apply_migrations(dsn))24171nixbot/tests/support.py:285: in run_sync24172 return executor.submit(asyncio.run, coro).result(timeout=120)24173 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24174/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24175 return self.__get_result()24176 ^^^^^^^^^^^^^^^^^^^24177/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24178 raise self._exception24179/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24180 result = ctx.run(self.task)24181 ^^^^^^^^^^^^^^^^^^24182/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24183 return fn(*args, **kwargs)24184 ^^^^^^^^^^^^^^^^^^^24185/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24186 return runner.run(main)24187 ^^^^^^^^^^^^^^^^24188/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24189 return self._loop.run_until_complete(task)24190 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24191/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24192 return future.result()24193 ^^^^^^^^^^^^^^^24194nixbot/migrations.py:99: in apply_migrations24195 migrations = load_migrations()24196 ^^^^^^^^^^^^^^^^^24197_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2419824199 def load_migrations() -> list[Migration]:24200 """Load migration scripts shipped with the package, ordered by version."""24201 migrations = []24202 for entry in resources.files(__package__).joinpath("migrations").iterdir():24203 m = _SCRIPT_RE.match(entry.name)24204 if m is None:24205 continue24206 migrations.append(24207 Migration(24208 version=int(m.group(1)),24209 name=m.group(2),24210 sql=entry.read_text(),24211 )24212 )24213 migrations.sort(key=lambda mig: mig.version)24214 versions = [m.version for m in migrations]24215 if len(set(versions)) != len(versions):24216 msg = f"Duplicate migration versions: {versions}"24217> raise MigrationError(msg)24218E 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]2421924220nixbot/migrations.py:67: MigrationError24221___________________ ERROR at setup of test_repos_and_builds ____________________24222[gw5] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142422324224fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>24225request = <SubRequest 'postgres_dsn' for <Function test_repos_and_builds>>2422624227 @pytest.hookimpl(wrapper=True)24228 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:24229 if (24230 fixturedef.argname == "event_loop_policy"24231 and fixturedef.func.__module__ != __name__24232 ):24233 warnings.warn(24234 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),24235 )24236 asyncio_mode = _get_asyncio_mode(request.config)24237 if not _is_asyncio_fixture_function(fixturedef.func):24238 if asyncio_mode == Mode.STRICT:24239 # Ignore async fixtures without explicit asyncio mark in strict mode24240 # This applies to pytest_trio fixtures, for example24241 return (yield)24242 if not _is_coroutine_or_asyncgen(fixturedef.func):24243> return (yield)24244 ^^^^^2424524246/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 24247_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24248nixbot/tests/conftest.py:33: in postgres_dsn24249 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24250 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24251/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24252 return next(self.gen)24253 ^^^^^^^^^^^^^^24254nixbot/tests/support.py:327: in ephemeral_postgres24255 run_sync(apply_migrations(dsn))24256nixbot/tests/support.py:285: in run_sync24257 return executor.submit(asyncio.run, coro).result(timeout=120)24258 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24259/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24260 return self.__get_result()24261 ^^^^^^^^^^^^^^^^^^^24262/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24263 raise self._exception24264/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24265 result = ctx.run(self.task)24266 ^^^^^^^^^^^^^^^^^^24267/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24268 return fn(*args, **kwargs)24269 ^^^^^^^^^^^^^^^^^^^24270/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24271 return runner.run(main)24272 ^^^^^^^^^^^^^^^^24273/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24274 return self._loop.run_until_complete(task)24275 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24276/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24277 return future.result()24278 ^^^^^^^^^^^^^^^24279nixbot/migrations.py:99: in apply_migrations24280 migrations = load_migrations()24281 ^^^^^^^^^^^^^^^^^24282_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2428324284 def load_migrations() -> list[Migration]:24285 """Load migration scripts shipped with the package, ordered by version."""24286 migrations = []24287 for entry in resources.files(__package__).joinpath("migrations").iterdir():24288 m = _SCRIPT_RE.match(entry.name)24289 if m is None:24290 continue24291 migrations.append(24292 Migration(24293 version=int(m.group(1)),24294 name=m.group(2),24295 sql=entry.read_text(),24296 )24297 )24298 migrations.sort(key=lambda mig: mig.version)24299 versions = [m.version for m in migrations]24300 if len(set(versions)) != len(versions):24301 msg = f"Duplicate migration versions: {versions}"24302> raise MigrationError(msg)24303E 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]2430424305nixbot/migrations.py:67: MigrationError24306__________________ ERROR at setup of test_api_log_stream_json __________________24307[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142430824309request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24310tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2431124312 @pytest.fixture(scope="module")24313 def postgres_dsn(24314 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24315 ) -> Iterator[str]:24316 if shutil.which("initdb") is None:24317 pytest.skip("postgresql not available")24318 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24319> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24320 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2432124322nixbot/tests/conftest.py:33: 24323_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24324/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24325 return next(self.gen)24326 ^^^^^^^^^^^^^^24327nixbot/tests/support.py:327: in ephemeral_postgres24328 run_sync(apply_migrations(dsn))24329nixbot/tests/support.py:285: in run_sync24330 return executor.submit(asyncio.run, coro).result(timeout=120)24331 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24332/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24333 return self.__get_result()24334 ^^^^^^^^^^^^^^^^^^^24335/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24336 raise self._exception24337/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24338 result = ctx.run(self.task)24339 ^^^^^^^^^^^^^^^^^^24340/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24341 return fn(*args, **kwargs)24342 ^^^^^^^^^^^^^^^^^^^24343/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24344 return runner.run(main)24345 ^^^^^^^^^^^^^^^^24346/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24347 return self._loop.run_until_complete(task)24348 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24349/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24350 return future.result()24351 ^^^^^^^^^^^^^^^24352nixbot/migrations.py:99: in apply_migrations24353 migrations = load_migrations()24354 ^^^^^^^^^^^^^^^^^24355_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2435624357 def load_migrations() -> list[Migration]:24358 """Load migration scripts shipped with the package, ordered by version."""24359 migrations = []24360 for entry in resources.files(__package__).joinpath("migrations").iterdir():24361 m = _SCRIPT_RE.match(entry.name)24362 if m is None:24363 continue24364 migrations.append(24365 Migration(24366 version=int(m.group(1)),24367 name=m.group(2),24368 sql=entry.read_text(),24369 )24370 )24371 migrations.sort(key=lambda mig: mig.version)24372 versions = [m.version for m in migrations]24373 if len(set(versions)) != len(versions):24374 msg = f"Duplicate migration versions: {versions}"24375> raise MigrationError(msg)24376E 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]2437724378nixbot/migrations.py:67: MigrationError24379_________ ERROR at setup of test_failure_reports_retries_and_gives_up __________24380[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142438124382self = <Coroutine test_failure_reports_retries_and_gives_up>2438324384 def setup(self) -> None:24385 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24386 if runner_fixture_id not in self.fixturenames:24387 self.fixturenames.append(runner_fixture_id)24388 # When loop factories are configured, resolve the loop factory24389 # fixture early so that a factory variant change cascades cache24390 # invalidation before any async fixture checks its cache.24391 hook_caller = self.config.hook.pytest_asyncio_loop_factories24392 if hook_caller.get_hookimpls():24393 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24394> return super().setup()24395 ^^^^^^^^^^^^^^^2439624397/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24398_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24399nixbot/tests/conftest.py:33: in postgres_dsn24400 with ephemeral_postgres(tmp_path_factory, dbname) as dsn: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_build_eval_stats_surface ________________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-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/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_finished_attrs_cursor _________________24531[gw5] 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-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw5'), _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_control_requires_token _________________24604[gw5] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142460524606request = <SubRequest 'postgres_dsn' for <Function test_repos_and_builds>>24607tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw5'), _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[gw5] 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-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw5'), _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[gw5] 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-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen.../nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw5'), _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[gw1] 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[gw1] 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[gw1] 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[gw9] 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_____________________________ test_executor_cancel _____________________________25093[gw2] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142509425095fut = <Task cancelled name='Task-100' coro=<NixBuildExecutor.build_attribute() done, defined at /nix/var/nix/builds/nix-37012-1646484975/nixbot/nixbot/executor.py:793>>25096timeout = 52509725098 async def wait_for(fut, timeout):25099 """Wait for the single Future or coroutine to complete, with timeout.25100 25101 Coroutine will be wrapped in Task.25102 25103 Returns result of the Future or coroutine. When a timeout occurs,25104 it cancels the task and raises TimeoutError. To avoid the task25105 cancellation, wrap it in shield().25106 25107 If the wait is cancelled, the task is also cancelled.25108 25109 If the task suppresses the cancellation and returns a value instead,25110 that value is returned.25111 25112 This function is a coroutine.25113 """25114 # The special case for timeout <= 0 is for the following case:25115 #25116 # async def test_waitfor():25117 # func_started = False25118 #25119 # async def func():25120 # nonlocal func_started25121 # func_started = True25122 #25123 # try:25124 # await asyncio.wait_for(func(), 0)25125 # except asyncio.TimeoutError:25126 # assert not func_started25127 # else:25128 # assert False25129 #25130 # asyncio.run(test_waitfor())25131 25132 25133 if timeout is not None and timeout <= 0:25134 fut = ensure_future(fut)25135 25136 if fut.done():25137 return fut.result()25138 25139 await _cancel_and_wait(fut)25140 try:25141 return fut.result()25142 except exceptions.CancelledError as exc:25143 raise TimeoutError from exc25144 25145 async with timeouts.timeout(timeout):25146> return await fut25147 ^^^^^^^^^2514825149/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/tasks.py:488: 25150_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25151nixbot/executor.py:845: in build_attribute25152 outcome, transient = await self._run_once(25153nixbot/executor.py:903: in _run_once25154 await group.reap()25155/nix/store/q1xj08iyxwsngn10f0pbp8b0bcdgfdq2-python3.14-nixbot-effects/lib/python3.14/site-packages/nixbot_effects/proc.py:82: in reap25156 await self.proc.wait()25157/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/subprocess.py:137: in wait25158 return await self._transport._wait()25159 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25160_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2516125162self = <_UnixSubprocessTransport pid=38337 returncode=-9 stdout=<_UnixReadPipeTransport fd=16 polling>>2516325164 async def _wait(self):25165 """Wait until the process exit and return the process return code.25166 25167 This method is a coroutine."""25168 if self._returncode is not None:25169 return self._returncode25170 25171 waiter = self._loop.create_future()25172 self._exit_waiters.append(waiter)25173> return await waiter25174 ^^^^^^^^^^^^25175E asyncio.exceptions.CancelledError2517625177/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_subprocess.py:255: CancelledError2517825179The above exception was the direct cause of the following exception:2518025181tmp_path = PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw2/test_executor_cancel0')25182fake_nix = PosixPath('/nix/var/nix/builds/nix-37012-1646484975/pytest-of-_nixbld11/pytest-0/popen-gw2/test_executor_cancel0/control')2518325184 async def test_executor_cancel(tmp_path: Path, fake_nix: Path) -> None:25185 fake_nix.write_text("hang")25186 25187 executor = NixBuildExecutor(FairScheduler(2), BuildSettings(log_dir=tmp_path))25188 writer = LogWriter(path=tmp_path / "log.zst")25189 cancel_event = asyncio.Event()25190 task = asyncio.create_task(25191 executor.build_attribute("b", mk_job(), writer, tmp_path, cancel_event)25192 )25193 await asyncio.sleep(0.2)25194 cancel_event.set()25195> outcome = await asyncio.wait_for(task, timeout=5)25196 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2519725198nixbot/tests/test_executor.py:374: 25199_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25200/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/tasks.py:487: in wait_for25201 async with timeouts.timeout(timeout):25202 ^^^^^^^^^^^^^^^^^^^^^^^^^25203_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2520425205self = <Timeout [expired]>25206exc_type = <class 'asyncio.exceptions.CancelledError'>25207exc_val = CancelledError(), exc_tb = <traceback object at 0x10d6883c0>2520825209 async def __aexit__(25210 self,25211 exc_type: type[BaseException] | None,25212 exc_val: BaseException | None,25213 exc_tb: TracebackType | None,25214 ) -> bool | None:25215 assert self._state in (_State.ENTERED, _State.EXPIRING)25216 25217 if self._timeout_handler is not None:25218 self._timeout_handler.cancel()25219 self._timeout_handler = None25220 25221 if self._state is _State.EXPIRING:25222 self._state = _State.EXPIRED25223 25224 if self._task.uncancel() <= self._cancelling and exc_type is not None:25225 # Since there are no new cancel requests, we're25226 # handling this.25227 if issubclass(exc_type, exceptions.CancelledError):25228> raise TimeoutError from exc_val25229E TimeoutError2523025231/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/timeouts.py:115: TimeoutError25232=========================== short test summary info ============================25233FAILED nixbot/tests/test_db.py::test_load_migrations - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25234FAILED nixbot/tests/test_executor.py::test_executor_cancel - TimeoutError25235ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_distinct_per_effect - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25236ERROR nixbot/tests/test_web.py::test_html_error_pages - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25237ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_sanitizes_traversal - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25238ERROR nixbot/tests/test_control.py::test_control_buttons_hidden_without_permission - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25239ERROR nixbot/tests/test_forge.py::test_project_store_sync_and_legacy_import - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25240ERROR nixbot/tests/test_db.py::test_migrations_idempotent - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25241ERROR nixbot/tests/test_service.py::test_resolve_credential_path - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25242ERROR nixbot/tests/test_web.py::test_api_strips_ansi_from_errors - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25243ERROR nixbot/tests/test_orchestrator.py::test_full_lifecycle - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25244ERROR nixbot/tests/test_web.py::test_homepage - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25245ERROR nixbot/tests/test_db.py::test_failed_migration_error_not_masked - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25246ERROR nixbot/tests/test_service.py::test_build_service_accepts_asyncpg_dsn - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25247ERROR nixbot/tests/test_control.py::test_admin_can_restart_and_cancel - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25248ERROR nixbot/tests/test_orchestrator.py::test_failure_aggregation - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25249ERROR nixbot/tests/test_forge.py::test_legacy_import_runs_despite_pull_based_rows - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25250ERROR nixbot/tests/test_web.py::test_project_page_with_filters - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25251ERROR nixbot/tests/test_service.py::test_visibility_fetcher_and_cache_ttl_wired - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25252ERROR nixbot/tests/test_db.py::test_edited_migration_rejected - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25253ERROR nixbot/tests/test_control.py::test_pr_author_can_control_own_pr - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25254ERROR nixbot/tests/test_visibility.py::test_anonymous_sees_public_only - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25255ERROR nixbot/tests/test_orchestrator.py::test_tree_hash_reuse - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25256ERROR nixbot/tests/test_forge.py::test_legacy_import_scopes_topics_per_forge - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25257ERROR nixbot/tests/test_web.py::test_status_badge_urls - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25258ERROR nixbot/tests/test_control.py::test_repo_writer_can_control_without_admin_or_authorship - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25259ERROR nixbot/tests/test_service.py::test_aclose_cancels_in_flight_tasks - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25260ERROR nixbot/tests/test_visibility.py::test_unauthorized_user_sees_public_only - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25261ERROR nixbot/tests/test_db.py::test_catchup_migration_repairs_pre_0033_schema - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25262ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_from_cancelled_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25263ERROR nixbot/tests/test_forge.py::test_prune_missing_disabled_projects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25264ERROR nixbot/tests/test_web.py::test_all_digit_branch_is_filterable - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25265ERROR nixbot/tests/test_control.py::test_cancel_all_requires_admin - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25266ERROR nixbot/tests/test_service.py::test_pr_close_discards_queued_changes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25267ERROR nixbot/tests/test_visibility.py::test_authorized_user_sees_private - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25268ERROR nixbot/tests/test_db.py::test_huge_attr_name_does_not_break_notify_trigger - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25269ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_skipped_when_drvs_gone - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25270ERROR nixbot/tests/test_forge.py::test_project_store_sync_skips_unchanged_rows - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25271ERROR nixbot/tests/test_web.py::test_build_page - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25272ERROR nixbot/tests/test_control.py::test_cancel_all_cancels_pending_and_running_builds - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25273ERROR nixbot/tests/test_visibility.py::test_admin_sees_everything - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25274ERROR nixbot/tests/test_service.py::test_build_branches_gates_branch_pushes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25275ERROR nixbot/tests/test_db.py::test_schema_constraints - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25276ERROR nixbot/tests/test_orchestrator.py::test_main_push_promotes_reused_pr_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25277ERROR nixbot/tests/test_web.py::test_attribute_rows_fragment_paginates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25278ERROR nixbot/tests/test_forge.py::test_gitea_hook_registration - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25279ERROR nixbot/tests/test_control.py::test_cancel_all_button_admin_only - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25280ERROR nixbot/tests/test_visibility.py::test_admin_sees_disabled_repos_without_search - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25281ERROR nixbot/tests/test_service.py::test_restart_gitlab_mr_build_fetches_mr_refs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25282ERROR nixbot/tests/test_db.py::test_check_run_store_round_trip - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25283ERROR nixbot/tests/test_web.py::test_build_page_shows_eval_warning_groups - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25284ERROR nixbot/tests/test_control.py::test_csrf_cross_origin_rejected - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25285ERROR nixbot/tests/test_forge.py::test_gitlab_heads_carry_target_branch_base - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25286ERROR nixbot/tests/test_orchestrator.py::test_merge_conflict_fails_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25287ERROR nixbot/tests/test_visibility.py::test_non_admin_does_not_see_disabled_repos - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25288ERROR nixbot/tests/test_service.py::test_restart_eval_failed_build_reevaluates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25289ERROR nixbot/tests/test_web.py::test_build_page_shows_per_attribute_eval_warnings - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25290ERROR nixbot/tests/test_control.py::test_restart_single_attribute - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25291ERROR nixbot/tests/test_db.py::test_failed_status_store_component - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25292ERROR nixbot/tests/test_orchestrator.py::test_build_reuse_clears_pr_author_in_other_context - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25293ERROR nixbot/tests/test_visibility.py::test_api_token_sees_private - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25294ERROR nixbot/tests/test_forge.py::test_gitea_heads_encode_slashed_default_branch - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25295ERROR nixbot/tests/test_control.py::test_restart_unknown_attribute_is_404 - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25296ERROR nixbot/tests/test_web.py::test_build_page_renders_ansi_in_error - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25297ERROR nixbot/tests/test_orchestrator.py::test_effects_started_flag - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25298ERROR nixbot/tests/test_db.py::test_failed_build_cache_component - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25299ERROR nixbot/tests/test_forge.py::test_reconcile_unbuilt_heads - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25300ERROR nixbot/tests/test_service.py::test_restart_clears_stale_error_and_warnings - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25301ERROR nixbot/tests/test_visibility.py::test_admin_api_token_sees_private - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25302ERROR nixbot/tests/test_control.py::test_restart_attribute_with_special_chars_redirects_encoded - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25303ERROR nixbot/tests/test_web.py::test_running_build_shows_progress - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25304ERROR nixbot/tests/test_db.py::test_get_or_create_build_concurrent_no_duplicates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25305ERROR nixbot/tests/test_orchestrator.py::test_aggregation_generation_monotonic - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25306ERROR nixbot/tests/test_forge.py::test_gitea_watermark_stops_pagination - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25307ERROR nixbot/tests/test_service.py::test_restart_unknown_attribute_is_a_noop - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25308ERROR nixbot/tests/test_visibility.py::test_forge_repo_admins_can_toggle_their_repos - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25309ERROR nixbot/tests/test_control.py::test_admin_project_toggle - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25310ERROR nixbot/tests/test_web.py::test_build_page_live_markers - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25311ERROR nixbot/tests/test_db.py::test_commit_eval_result_atomic - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25312ERROR nixbot/tests/test_orchestrator.py::test_internal_error_not_recorded_in_failed_build_cache - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25313ERROR nixbot/tests/test_service.py::test_restart_failed_eval_attribute_reevaluates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25314ERROR nixbot/tests/test_forge.py::test_gitlab_heads_filter_updated_after - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25315ERROR nixbot/tests/test_visibility.py::test_forge_repo_writers_can_control_their_repos - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25316ERROR nixbot/tests/test_control.py::test_toggle_activates_newly_enabled_project - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25317ERROR nixbot/tests/test_web.py::test_attribute_history - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25318ERROR nixbot/tests/test_db.py::test_cancelled_build_not_reused - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25319ERROR nixbot/tests/test_orchestrator.py::test_log_path_attribute_name_sanitized - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25320ERROR nixbot/tests/test_visibility.py::test_fetch_errors_are_not_cached - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25321ERROR nixbot/tests/test_control.py::test_run_schedule - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25322ERROR nixbot/tests/test_service.py::test_interrupted_reeval_keeps_attribute_rows - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25323ERROR nixbot/tests/test_web.py::test_overview_ignores_pr_branches - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25324ERROR nixbot/tests/test_forge.py::test_reconcile_watermark_store - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25325ERROR nixbot/tests/test_db.py::test_reuse_backfills_pr_fields - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25326ERROR nixbot/tests/test_visibility.py::test_access_cache_used - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25327ERROR nixbot/tests/test_control.py::test_repo_refresh - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25328ERROR nixbot/tests/test_service.py::test_restart_cancelled_build_reschedules_attributes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25329ERROR nixbot/tests/test_orchestrator.py::test_cancel_interrupts_evaluation - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25330ERROR nixbot/tests/test_web.py::test_pending_build_shows_eval_blocker - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25331ERROR nixbot/tests/test_forge.py::test_register_repo_hook_without_admin_warns - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25332ERROR nixbot/tests/test_visibility.py::test_metrics_unauthenticated_no_private_names - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25333ERROR nixbot/tests/test_db.py::test_reuse_by_other_pr_clears_both_identity_fields - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25334ERROR nixbot/tests/test_control.py::test_api_enable_disable - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25335ERROR nixbot/tests/test_web.py::test_project_filter_escapes_like_wildcards - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25336ERROR nixbot/tests/test_orchestrator.py::test_build_waiting_for_eval_slot_stays_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25337ERROR nixbot/tests/test_service.py::test_restart_cancelled_mid_eval_reevaluates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25338ERROR nixbot/tests/test_forge.py::test_gitlab_hook_registration - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25339ERROR nixbot/tests/test_visibility.py::test_configured_viewers_see_private - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25340ERROR nixbot/tests/test_control.py::test_api_restart_and_cancel - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25341ERROR nixbot/tests/test_db.py::test_branch_push_takes_over_reused_pr_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25342ERROR nixbot/tests/test_web.py::test_page_out_of_range_does_not_error - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25343ERROR nixbot/tests/test_service.py::test_restart_while_unwinding_waits_then_runs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25344ERROR nixbot/tests/test_orchestrator.py::test_pending_attribute_rows_recorded_for_crash_recovery - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25345ERROR nixbot/tests/test_visibility.py::test_api_token_inherits_login_groups - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25346ERROR 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...25347ERROR nixbot/tests/test_control.py::test_api_token_lifecycle - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25348ERROR nixbot/tests/test_web.py::test_activity_page - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25349ERROR nixbot/tests/test_db.py::test_pr_does_not_capture_branch_push_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25350ERROR nixbot/tests/test_service.py::test_restart_attribute_while_build_running - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25351ERROR nixbot/tests/test_orchestrator.py::test_eval_warnings_null_when_empty - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25352ERROR nixbot/tests/test_visibility.py::test_logout_invalidates_access_cache - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25353ERROR nixbot/tests/test_control.py::test_expired_api_tokens_pruned - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25354ERROR nixbot/tests/test_forge.py::test_gitlab_register_repo_hook_status_classification - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25355ERROR nixbot/tests/test_web.py::test_activity_no_sentinel_on_exact_page - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25356ERROR nixbot/tests/test_db.py::test_complete_attribute_preserves_eval_outputs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25357ERROR nixbot/tests/test_service.py::test_cancel_not_running_posts_forge_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25358ERROR nixbot/tests/test_orchestrator.py::test_rerun_flips_stale_red_eval_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25359ERROR nixbot/tests/test_control.py::test_token_creation_with_expiry - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25360ERROR nixbot/tests/test_web.py::test_activity_rows_fragment_pagination - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25361ERROR nixbot/tests/test_forge.py::test_gitea_legacy_hook_delete_failure_warns - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25362ERROR nixbot/tests/test_db.py::test_complete_attribute_marks_substituted_as_cached - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25363ERROR nixbot/tests/test_service.py::test_check_rerequested_dispatch - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25364ERROR nixbot/tests/test_control.py::test_proxy_user_can_manage_api_tokens - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25365ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_failures_not_cached - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25366ERROR nixbot/tests/test_forge.py::test_sync_tolerates_in_batch_duplicates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25367ERROR nixbot/tests/test_web.py::test_project_rows_fragment_filters - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25368ERROR nixbot/tests/test_service.py::test_cancel_not_running_settles_attribute_rows - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25369ERROR nixbot/tests/test_control.py::test_bearer_token_cannot_manage_api_tokens - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25370ERROR nixbot/tests/test_web.py::test_metrics_are_gauges - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25371ERROR nixbot/tests/test_db.py::test_complete_attribute_replaces_log_metadata - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25372ERROR nixbot/tests/test_service.py::test_cancel_attribute_not_running_reaggregates_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25373ERROR nixbot/tests/test_control.py::test_api_token_controls_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25374ERROR nixbot/tests/test_orchestrator.py::test_gitlab_mr_fetches_merge_request_refs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25375ERROR nixbot/tests/test_db.py::test_record_attributes_persists_pending_rows_with_outputs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25376ERROR nixbot/tests/test_service.py::test_pull_based_projects_synced_and_buildable - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25377ERROR nixbot/tests/test_control.py::test_build_service_composition - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25378ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[github] - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25379ERROR nixbot/tests/test_web.py::test_metrics_are_cached - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25380ERROR nixbot/tests/test_db.py::test_mark_attribute_building_does_not_resurrect_cancelled_rows - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25381ERROR nixbot/tests/test_service.py::test_topic_does_not_hard_filter_discovery - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25382ERROR nixbot/tests/test_web.py::test_static_urls_carry_content_version - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25383ERROR nixbot/tests/test_control.py::test_restart_removes_stale_logs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25384ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[gitlab] - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25385ERROR nixbot/tests/test_db.py::test_mark_attribute_building_sets_status_and_started_at - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25386ERROR nixbot/tests/test_service.py::test_startup_reevaluates_interrupted_eval - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25387ERROR nixbot/tests/test_web.py::test_legacy_project_urls_redirect - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25388ERROR nixbot/tests/test_control.py::test_restart_clears_failed_cache - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25389ERROR nixbot/tests/test_db.py::test_complete_attribute_if_unfinished_skips_terminal_rows - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25390ERROR nixbot/tests/test_service.py::test_rerun_of_interrupted_eval_reevaluates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25391ERROR nixbot/tests/test_orchestrator.py::test_cancelled_build_reuse_rebuilds - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25392ERROR nixbot/tests/test_web.py::test_private_repo_public_badge_bypasses_session_visibility - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25393ERROR nixbot/tests/test_control.py::test_webhook_setup_shown_to_admin_only - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25394ERROR nixbot/tests/test_db.py::test_failed_build_cache_scoped_per_project - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25395ERROR nixbot/tests/test_web.py::test_legacy_redirect_hides_invisible_projects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25396ERROR nixbot/tests/test_service.py::test_rerun_resumes_building_rows_and_keeps_finished - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25397ERROR nixbot/tests/test_orchestrator.py::test_inflight_share_fans_out_final_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25398ERROR nixbot/tests/test_control.py::test_webhook_secret_regeneration - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25399ERROR nixbot/tests/test_db.py::test_eval_stats_lifecycle - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25400ERROR nixbot/tests/test_web.py::test_legacy_redirect_404s_on_ambiguous_owner_name - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25401ERROR nixbot/tests/test_service.py::test_rerun_reevaluates_when_drv_paths_were_garbage_collected - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25402ERROR nixbot/tests/test_orchestrator.py::test_stale_event_does_not_supersede_newer_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25403ERROR nixbot/tests/test_control.py::test_retry_after_parsing - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25404ERROR nixbot/tests/test_web.py::test_health_and_static - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25405ERROR nixbot/tests/test_orchestrator.py::test_eval_failure_cleans_cancel_events - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25406ERROR nixbot/tests/test_service.py::test_reeval_failure_marks_build_failed - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25407ERROR nixbot/tests/test_control.py::test_work_retry_delay_honors_retry_after - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25408ERROR nixbot/tests/test_web.py::test_404s - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25409ERROR nixbot/tests/test_service.py::test_gitlab_discovery_and_hook_registration - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25410ERROR nixbot/tests/test_orchestrator.py::test_eval_settings_wired - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25411ERROR nixbot/tests/test_control.py::test_report_retry - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25412ERROR nixbot/tests/test_web.py::test_log_viewer_and_raw - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25413ERROR 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...25414ERROR nixbot/tests/test_service.py::test_health_serves_while_startup_blocks - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25415ERROR nixbot/tests/test_control.py::test_effect_item_setup_failure_settles_row - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25416ERROR nixbot/tests/test_web.py::test_structured_log_endpoints - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25417ERROR nixbot/tests/test_orchestrator.py::test_eval_gcroots_dir_removed_after_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25418ERROR nixbot/tests/test_control.py::test_restart_attribute_posts_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25419ERROR nixbot/tests/test_web.py::test_structured_log_window_caps_huge_derivation - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25420ERROR nixbot/tests/test_orchestrator.py::test_effects_run_after_default_branch_success - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25421ERROR nixbot/tests/test_control.py::test_recovery_reports_interrupted_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25422ERROR 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...25423ERROR nixbot/tests/test_orchestrator.py::test_pr_worktree_config_cannot_grant_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25424ERROR nixbot/tests/test_web.py::test_attr_names_with_special_characters - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25425ERROR nixbot/tests/test_control.py::test_work_dispatch - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25426ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_runs_effects_again - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25427ERROR nixbot/tests/test_web.py::test_log_viewer_waits_for_queued_attribute - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25428ERROR nixbot/tests/test_deliver.py::test_match_skip_and_run - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25429ERROR nixbot/tests/test_control.py::test_restart_resets_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25430ERROR nixbot/tests/test_web.py::test_log_viewer_unavailable_for_logless_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25431ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_cancels_hung_effect - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25432ERROR nixbot/tests/test_control.py::test_effects_restart_route - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25433ERROR nixbot/tests/test_deliver.py::test_permission_denied_records_reason - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25434ERROR nixbot/tests/test_web.py::test_eval_error_served_like_build_log - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25435ERROR nixbot/tests/test_control.py::test_single_effect_restart_route - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25436ERROR nixbot/tests/test_orchestrator.py::test_rerun_single_effect - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25437ERROR nixbot/tests/test_cli.py::test_repo_list_and_toggle - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25438ERROR nixbot/tests/test_deliver.py::test_modified_files_gate - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25439ERROR nixbot/tests/test_web.py::test_api_projects_and_builds - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25440ERROR nixbot/tests/test_control.py::test_webhook_panel_is_forge_aware - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25441ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_runs_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25442ERROR nixbot/tests/test_cli.py::test_build_list_and_view - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25443ERROR nixbot/tests/test_deliver.py::test_forge_outage_is_retried - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25444ERROR nixbot/tests/test_web.py::test_build_rows_link_refs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25445ERROR nixbot/tests/test_control.py::test_api_attr_and_effects_control - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25446ERROR nixbot/tests/test_orchestrator.py::test_unsupported_system_attr_does_not_block_aggregation - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25447ERROR nixbot/tests/test_cli.py::test_build_restart_cancel - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25448ERROR nixbot/tests/test_deliver.py::test_forge_outage_gives_up - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25449ERROR nixbot/tests/test_web.py::test_attributes_sort_building_before_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25450ERROR nixbot/tests/test_cli.py::test_log_summary_attr_and_drv - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25451ERROR nixbot/tests/test_orchestrator.py::test_linked_context_reported_on_eval_failure - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25452ERROR nixbot/tests/test_web.py::test_queue_sorts_active_before_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25453ERROR nixbot/tests/test_deliver.py::test_lock_shared_with_push_effect_and_supersession - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25454ERROR nixbot/tests/test_cli.py::test_repo_and_build_inference - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25455ERROR nixbot/tests/test_orchestrator.py::test_eval_failure_settles_streamed_attributes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25456ERROR nixbot/tests/test_web.py::test_queue_position_is_global_and_skips_running - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25457ERROR nixbot/tests/test_deliver.py::test_checkout_is_pr_head_without_token - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25458ERROR nixbot/tests/test_cli.py::test_auth_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25459ERROR nixbot/tests/test_orchestrator.py::test_effect_rows_roundtrip - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25460ERROR nixbot/tests/test_web.py::test_openapi_docs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25461ERROR nixbot/tests/test_deliver.py::test_build_success_enqueues_delivery - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25462ERROR nixbot/tests/test_web.py::test_structured_live_stream - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25463ERROR nixbot/tests/test_orchestrator.py::test_effect_items_resume_only_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25464ERROR nixbot/tests/test_deliver.py::test_comment_and_close_webhooks_deliver - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25465ERROR nixbot/tests/test_web.py::test_drv_raw_serves_running_attribute - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25466ERROR nixbot/tests/test_orchestrator.py::test_effect_crash_settles_the_row - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25467ERROR nixbot/tests/test_deliver.py::test_close_after_merge_push_reused_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25468ERROR nixbot/tests/test_web.py::test_log_sse_stream_caps_history_backlog - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25469ERROR nixbot/tests/test_orchestrator.py::test_concurrent_effects_use_independent_worktrees - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25470ERROR nixbot/tests/test_deliver.py::test_build_finished_transitions - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25471ERROR nixbot/tests/test_web.py::test_log_sse_stream_neutralizes_carriage_returns - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25472ERROR nixbot/tests/test_recovery.py::test_resume_skips_terminal_attributes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25473ERROR nixbot/tests/test_orchestrator.py::test_locked_effect_gets_shared_dedup_key - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25474ERROR nixbot/tests/test_web.py::test_api_builds_commit_filter - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25475ERROR nixbot/tests/test_deliver.py::test_command_while_running_gets_notice - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25476ERROR nixbot/tests/test_recovery.py::test_settle_already_built - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25477ERROR nixbot/tests/test_orchestrator.py::test_effect_item_not_claimable_until_dep_settles - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25478ERROR nixbot/tests/test_deliver.py::test_other_command_does_not_supersede - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25479ERROR nixbot/tests/test_web.py::test_log_tail_param - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25480ERROR nixbot/tests/test_recovery.py::test_retention_cleanup - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25481ERROR 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...25482ERROR nixbot/tests/test_deliver.py::test_label_change_redelivers_pull_request - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25483ERROR nixbot/tests/test_web.py::test_api_build_failures - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25484ERROR nixbot/tests/test_orchestrator.py::test_effect_dep_failure_skips_dependent - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25485ERROR nixbot/tests/test_recovery.py::test_resume_includes_interrupted_building_attributes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25486ERROR nixbot/tests/test_web.py::test_api_build_failures_rejects_non_positive_tail - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25487ERROR nixbot/tests/test_deliver.py::test_build_outcome_and_restart_leave_event_history - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25488ERROR nixbot/tests/test_orchestrator.py::test_lock_serializes_builds_without_interleaving - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25489ERROR nixbot/tests/test_recovery.py::test_retention_skips_restarted_builds - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25490ERROR nixbot/tests/test_web.py::test_llms_txt - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25491ERROR nixbot/tests/test_orchestrator.py::test_effect_dep_cycle_fails_discovery - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25492ERROR nixbot/tests/test_deliver.py::test_restart_event_effect_reruns_with_stored_payload - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25493ERROR nixbot/tests/test_recovery.py::test_retention_ages_out_failed_caches - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25494ERROR nixbot/tests/test_web.py::test_event_broker_pushes_status_changes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25495ERROR nixbot/tests/test_web.py::test_events_stream_coalesces_burst - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25496ERROR nixbot/tests/test_orchestrator.py::test_failed_effect_reports_failure_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25497ERROR nixbot/tests/test_deliver.py::test_listing_failure_recorded_on_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25498ERROR nixbot/tests/test_recovery.py::test_failed_rebuild_settles_pending_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25499ERROR nixbot/tests/test_web.py::test_events_stream_refreshes_visibility - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25500ERROR nixbot/tests/test_orchestrator.py::test_post_process_error_does_not_wedge_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25501ERROR nixbot/tests/test_recovery.py::test_rerun_clears_stale_eval_warnings - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25502ERROR nixbot/tests/test_web.py::test_attribute_search - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25503ERROR nixbot/tests/test_orchestrator.py::test_unexpected_eval_path_error_settles_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25504ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_fail_on_recovery - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25505ERROR nixbot/tests/test_web.py::test_build_page_shows_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25506ERROR nixbot/tests/test_orchestrator.py::test_reuse_empty_succeeded_build_posts_eval_success - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25507ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_sweep_spares_live_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25508ERROR nixbot/tests/test_schedules.py::test_replace_schedules_preserves_last_run_for_unchanged_spec - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25509ERROR nixbot/tests/test_web.py::test_build_page_shows_event_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25510ERROR 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...25511ERROR nixbot/tests/test_web.py::test_effect_log_raw_text - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25512ERROR nixbot/tests/test_orchestrator.py::test_reuse_for_default_branch_push_runs_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25513ERROR nixbot/tests/test_schedules.py::test_replace_schedules_tolerates_duplicate_effect_names - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25514ERROR nixbot/tests/test_web.py::test_effect_log_viewer_status_icon - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25515ERROR nixbot/tests/test_orchestrator.py::test_reuse_replays_effect_statuses_to_new_commit - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25516ERROR nixbot/tests/test_schedules.py::test_store_roundtrip_and_due - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25517ERROR nixbot/tests/test_web.py::test_effect_changes_notify_build_events - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25518ERROR nixbot/tests/test_schedules.py::test_due_effects_window_and_bad_spec - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25519ERROR nixbot/tests/test_web.py::test_effects_state_api - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25520ERROR nixbot/tests/test_orchestrator.py::test_attach_to_already_terminal_build_replays_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25521ERROR nixbot/tests/test_web.py::test_pr_comment_api - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25522ERROR nixbot/tests/test_schedules.py::test_run_recording_and_overview - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25523ERROR nixbot/tests/test_orchestrator.py::test_cancel_during_eval_resolves_linked_eval_contexts - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25524ERROR nixbot/tests/test_web.py::test_workload_identity_api - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25525ERROR nixbot/tests/test_orchestrator.py::test_effect_log_does_not_collide_with_attribute_log - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25526ERROR nixbot/tests/test_web.py::test_logout_revokes_session_cookie - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25527ERROR nixbot/tests/test_orchestrator.py::test_post_process_paths_are_forge_scoped - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25528ERROR nixbot/tests/test_web.py::test_gitlab_nested_group_routes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25529ERROR nixbot/tests/test_upload.py::test_chunk_args_splits_on_byte_limit - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25530ERROR nixbot/tests/test_orchestrator.py::test_effects_phase_error_keeps_succeeded_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25531ERROR nixbot/tests/test_upload.py::test_parse_path_info_both_formats - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25532ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_renders_ansi - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25533ERROR nixbot/tests/test_orchestrator.py::test_reuse_post_process_error_still_reports_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25534ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_cross_project_404 - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25535ERROR nixbot/tests/test_upload.py::test_final_upload_reports_and_clears_queue - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25536ERROR nixbot/tests/test_web.py::test_scheduled_run_log_unavailable_placeholder - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25537ERROR nixbot/tests/test_orchestrator.py::test_reuse_with_missing_output_still_post_processes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25538ERROR nixbot/tests/test_upload.py::test_intermediates_batch_with_final_and_drop_invalid - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25539ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_waiting_before_log - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25540ERROR nixbot/tests/test_upload.py::test_stdin_mode - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25541ERROR nixbot/tests/test_web.py::test_scheduled_run_history_lists_runs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25542ERROR nixbot/tests/test_upload.py::test_pending_paths_survive_restart - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25543ERROR nixbot/tests/test_web.py::test_scheduled_run_history_special_chars - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25544ERROR nixbot/tests/test_upload.py::test_uploader_factory_picks_stream - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25545ERROR nixbot/tests/test_web.py::test_scheduled_run_stream_replays_history - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25546ERROR nixbot/tests/test_upload.py::test_stream_reports_per_path_and_clears_queue - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25547ERROR nixbot/tests/test_web.py::test_scheduled_run_notify_build_events - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25548ERROR nixbot/tests/test_web.py::test_api_log_toc_and_text - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25549ERROR nixbot/tests/test_upload.py::test_stream_error_is_reported_with_message - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25550ERROR nixbot/tests/test_upload.py::test_stream_child_crash_refeeds_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25551ERROR nixbot/tests/test_web.py::test_api_log_toc_flat_log_fallback - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25552ERROR nixbot/tests/test_cli_api.py::test_repos_and_builds - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25553ERROR nixbot/tests/test_web.py::test_api_log_stream_json - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25554ERROR nixbot/tests/test_upload.py::test_failure_reports_retries_and_gives_up - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25555ERROR nixbot/tests/test_web.py::test_build_eval_stats_surface - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25556ERROR nixbot/tests/test_cli_api.py::test_finished_attrs_cursor - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25557ERROR nixbot/tests/test_cli_api.py::test_control_requires_token - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25558ERROR nixbot/tests/test_cli_api.py::test_enable_disable - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25559ERROR nixbot/tests/test_cli_api.py::test_log_toc_and_text - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25560ERROR nixbot/tests/test_work_queue.py::test_enqueue_dedupes_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25561ERROR nixbot/tests/test_work_queue.py::test_claim_serializes_per_key - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25562ERROR nixbot/tests/test_work_queue.py::test_settle_interrupted_requeues - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25563============ 2 failed, 449 passed, 28 skipped, 328 errors in 12.78s ============