python3.14-nixbot-tests
checks.x86_64-linux.nixbot-tests
· build #364
· raw
1tribuchet: building on jamie2Sourcing python-remove-tests-dir-hook3Sourcing python-catch-conflicts-hook.sh4Sourcing python-remove-bin-bytecode-hook.sh5Sourcing pypa-build-hook6Using pypaBuildPhase7Sourcing python-runtime-deps-check-hook8Using pythonRuntimeDepsCheckHook9Sourcing pypa-install-hook10Using pypaInstallPhase11Sourcing python-imports-check-hook.sh12Using pythonImportsCheckPhase13Sourcing python-namespaces-hook14Sourcing python-catch-conflicts-hook.sh15Sourcing pytest-check-hook16Using pytestCheckPhase
unpackPhase
17unpacking source archive /nix/store/zwm2z7xg8nrc0qyx19wga55yh56njhll-nixbot18source root is nixbot19setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "nixbot/pyproject.toml"configurePhase
20no configure script, doing nothingbuildPhase
21Executing pypaBuildPhase22Creating a wheel...23pypa build flags: --no-isolation --outdir dist/ --wheel24* Getting build dependencies for wheel...25* Building wheel...26Successfully built nixbot-0.0.1-py3-none-any.whl27Finished creating a wheel...28Finished executing pypaBuildPhasepythonRuntimeDepsCheckHook
29Executing pythonRuntimeDepsCheck30Checking runtime dependencies for nixbot-0.0.1-py3-none-any.whl31Finished executing pythonRuntimeDepsCheckinstallPhase
32Executing pypaInstallPhase33Successfully installed nixbot-0.0.1-py3-none-any.whl34Finished executing pypaInstallPhasepythonOutputDistPhase
35Executing pythonOutputDistPhase36Finished executing pythonOutputDistPhasefixupPhase
37shrinking RPATHs of ELF executables and libraries in /nix/store/k49ialkrapij5mnb8wgl2p0095x3yvv6-python3.14-nixbot-tests38checking for references to /build/ in /nix/store/k49ialkrapij5mnb8wgl2p0095x3yvv6-python3.14-nixbot-tests...39patching script interpreter paths in /nix/store/k49ialkrapij5mnb8wgl2p0095x3yvv6-python3.14-nixbot-tests40stripping (with command strip and flags -S -p) in /nix/store/k49ialkrapij5mnb8wgl2p0095x3yvv6-python3.14-nixbot-tests/lib /nix/store/k49ialkrapij5mnb8wgl2p0095x3yvv6-python3.14-nixbot-tests/bin41shrinking RPATHs of ELF executables and libraries in /nix/store/6vnx2h1wh6n7ffgywl6xsnwzlrkrlli0-python3.14-nixbot-tests-dist42checking for references to /build/ in /nix/store/6vnx2h1wh6n7ffgywl6xsnwzlrkrlli0-python3.14-nixbot-tests-dist...43patching script interpreter paths in /nix/store/6vnx2h1wh6n7ffgywl6xsnwzlrkrlli0-python3.14-nixbot-tests-dist44Rewriting #!/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14 to #!/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.645wrapping `/nix/store/k49ialkrapij5mnb8wgl2p0095x3yvv6-python3.14-nixbot-tests/bin/nixbot'...46Executing pythonRemoveTestsDir47Finished executing pythonRemoveTestsDirinstallCheckPhase
48no Makefile or custom installCheckPhase, doing nothingpythonImportsCheckPhase
49Executing pythonImportsCheckPhasepytestCheckPhase
50Executing pytestCheckPhase51pytest flags: -m pytest --numprocesses=2452/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.53 warner(PytestBenchmarkWarning(text))54/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.55 warner(PytestBenchmarkWarning(text))56/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.57 warner(PytestBenchmarkWarning(text))58/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.59 warner(PytestBenchmarkWarning(text))60/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.61 warner(PytestBenchmarkWarning(text))62/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.63 warner(PytestBenchmarkWarning(text))64/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.65 warner(PytestBenchmarkWarning(text))66/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.67 warner(PytestBenchmarkWarning(text))68/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.69 warner(PytestBenchmarkWarning(text))70/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.71 warner(PytestBenchmarkWarning(text))72/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.73 warner(PytestBenchmarkWarning(text))74/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.75 warner(PytestBenchmarkWarning(text))76/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.77 warner(PytestBenchmarkWarning(text))78/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.79 warner(PytestBenchmarkWarning(text))80/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.81 warner(PytestBenchmarkWarning(text))82/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.83 warner(PytestBenchmarkWarning(text))84/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.85 warner(PytestBenchmarkWarning(text))86/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.87 warner(PytestBenchmarkWarning(text))88/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.89 warner(PytestBenchmarkWarning(text))90/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.91 warner(PytestBenchmarkWarning(text))92/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.93 warner(PytestBenchmarkWarning(text))94/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.95 warner(PytestBenchmarkWarning(text))96/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.97 warner(PytestBenchmarkWarning(text))98/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.99 warner(PytestBenchmarkWarning(text))100/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.101 warner(PytestBenchmarkWarning(text))102============================= test session starts ==============================103platform linux -- Python 3.14.6, pytest-9.1.1, pluggy-1.6.0104benchmark: 5.2.3 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)105rootdir: /build/nixbot106configfile: pyproject.toml107plugins: asyncio-1.4.0, timeout-2.4.0, xdist-3.8.0, benchmark-5.2.3, anyio-4.14.2108asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function109timeout: 60.0s110timeout method: signal111timeout func_only: False112created: 24/24 workers11324 workers [807 items]114115........................................................................ [ 8%]116................sssssssss............................................... [ 17%]117.....F.................................................................. [ 26%]118........................................................................ [ 35%]119..........................................s............................E [ 44%]120EEEEEE.EEEEEEEEEEEEE.EEEEEEEEEEE..E.EEEEEEEEEE.EEEEEEEEEEEEEEEEEE.EEEEEE [ 53%]121E.EEEEE.EE.E.E.EE.E...E.EE.E.EEEEEEEEEE.E.E.EEEEEEEEEE.EE..EEE.EEEEEEEEE [ 62%]122EEEEEE.E.EEE.E..E..EEEEEEEEE...EEEEEEEEE....EEE..E..E..E.......E.....E.. [ 71%]123...E.EE.EEEEEs.EEE....sEE.EEEEE.EEEEEEEEEEEEEEEEEEEEE.EEEEE.E.EEEEEEEEEE [ 80%]124EEEEEEEEEEEEEEEEEEEEEEEEEEEE.EEEEEE..........EEEEEEEEEEEEEEEEEEEEEEEEEEE [ 89%]125EEEEEEEEEEEEEEEEEEEEEE.EEEEEEEEEEEEE..EEE.EEEEEEEE.EEEEEE...E..EEEEEEEEE [ 98%]126EEEEEEEEE...... [100%]127==================================== ERRORS ====================================128_________________ ERROR at setup of test_migrations_idempotent _________________129[gw11] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14130131self = <Coroutine test_migrations_idempotent>132133 def setup(self) -> None:134 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"135 if runner_fixture_id not in self.fixturenames:136 self.fixturenames.append(runner_fixture_id)137 # When loop factories are configured, resolve the loop factory138 # fixture early so that a factory variant change cascades cache139 # invalidation before any async fixture checks its cache.140 hook_caller = self.config.hook.pytest_asyncio_loop_factories141 if hook_caller.get_hookimpls():142 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)143> return super().setup()144 ^^^^^^^^^^^^^^^145146/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 147_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 148/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup149 return (yield)150 ^^^^^151nixbot/tests/conftest.py:33: in postgres_dsn152 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:153 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^154/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__155 return next(self.gen)156 ^^^^^^^^^^^^^^157nixbot/tests/support.py:327: in ephemeral_postgres158 run_sync(apply_migrations(dsn))159nixbot/tests/support.py:285: in run_sync160 return executor.submit(asyncio.run, coro).result(timeout=120)161 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^162/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result163 return self.__get_result()164 ^^^^^^^^^^^^^^^^^^^165/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result166 raise self._exception167/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run168 result = ctx.run(self.task)169 ^^^^^^^^^^^^^^^^^^170/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run171 return fn(*args, **kwargs)172 ^^^^^^^^^^^^^^^^^^^173/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run174 return runner.run(main)175 ^^^^^^^^^^^^^^^^176/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run177 return self._loop.run_until_complete(task)178 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^179/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete180 return future.result()181 ^^^^^^^^^^^^^^^182nixbot/migrations.py:99: in apply_migrations183 migrations = load_migrations()184 ^^^^^^^^^^^^^^^^^185_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 186187 def load_migrations() -> list[Migration]:188 """Load migration scripts shipped with the package, ordered by version."""189 migrations = []190 for entry in resources.files(__package__).joinpath("migrations").iterdir():191 m = _SCRIPT_RE.match(entry.name)192 if m is None:193 continue194 migrations.append(195 Migration(196 version=int(m.group(1)),197 name=m.group(2),198 sql=entry.read_text(),199 )200 )201 migrations.sort(key=lambda mig: mig.version)202 versions = [m.version for m in migrations]203 if len(set(versions)) != len(versions):204 msg = f"Duplicate migration versions: {versions}"205> raise MigrationError(msg)206E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]207208nixbot/migrations.py:67: MigrationError209___________ ERROR at setup of test_resume_skips_terminal_attributes ____________210[gw17] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14211212self = <Coroutine test_resume_skips_terminal_attributes>213214 def setup(self) -> None:215 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"216 if runner_fixture_id not in self.fixturenames:217 self.fixturenames.append(runner_fixture_id)218 # When loop factories are configured, resolve the loop factory219 # fixture early so that a factory variant change cascades cache220 # invalidation before any async fixture checks its cache.221 hook_caller = self.config.hook.pytest_asyncio_loop_factories222 if hook_caller.get_hookimpls():223 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)224> return super().setup()225 ^^^^^^^^^^^^^^^226227/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 228_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup230 return (yield)231 ^^^^^232nixbot/tests/conftest.py:33: in postgres_dsn233 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:234 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^235/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__236 return next(self.gen)237 ^^^^^^^^^^^^^^238nixbot/tests/support.py:327: in ephemeral_postgres239 run_sync(apply_migrations(dsn))240nixbot/tests/support.py:285: in run_sync241 return executor.submit(asyncio.run, coro).result(timeout=120)242 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^243/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result244 return self.__get_result()245 ^^^^^^^^^^^^^^^^^^^246/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result247 raise self._exception248/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run249 result = ctx.run(self.task)250 ^^^^^^^^^^^^^^^^^^251/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run252 return fn(*args, **kwargs)253 ^^^^^^^^^^^^^^^^^^^254/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run255 return runner.run(main)256 ^^^^^^^^^^^^^^^^257/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run258 return self._loop.run_until_complete(task)259 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^260/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete261 return future.result()262 ^^^^^^^^^^^^^^^263nixbot/migrations.py:99: in apply_migrations264 migrations = load_migrations()265 ^^^^^^^^^^^^^^^^^266_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 267268 def load_migrations() -> list[Migration]:269 """Load migration scripts shipped with the package, ordered by version."""270 migrations = []271 for entry in resources.files(__package__).joinpath("migrations").iterdir():272 m = _SCRIPT_RE.match(entry.name)273 if m is None:274 continue275 migrations.append(276 Migration(277 version=int(m.group(1)),278 name=m.group(2),279 sql=entry.read_text(),280 )281 )282 migrations.sort(key=lambda mig: mig.version)283 versions = [m.version for m in migrations]284 if len(set(versions)) != len(versions):285 msg = f"Duplicate migration versions: {versions}"286> raise MigrationError(msg)287E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]288289nixbot/migrations.py:67: MigrationError290_______ ERROR at setup of test_scheduled_worktree_id_distinct_per_effect _______291[gw7] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14292293fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>294request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>295296 @pytest.hookimpl(wrapper=True)297 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:298 if (299 fixturedef.argname == "event_loop_policy"300 and fixturedef.func.__module__ != __name__301 ):302 warnings.warn(303 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),304 )305 asyncio_mode = _get_asyncio_mode(request.config)306 if not _is_asyncio_fixture_function(fixturedef.func):307 if asyncio_mode == Mode.STRICT:308 # Ignore async fixtures without explicit asyncio mark in strict mode309 # This applies to pytest_trio fixtures, for example310 return (yield)311 if not _is_coroutine_or_asyncgen(fixturedef.func):312> return (yield)313 ^^^^^314315/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 316_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 317nixbot/tests/conftest.py:33: in postgres_dsn318 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:319 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^320/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__321 return next(self.gen)322 ^^^^^^^^^^^^^^323nixbot/tests/support.py:327: in ephemeral_postgres324 run_sync(apply_migrations(dsn))325nixbot/tests/support.py:285: in run_sync326 return executor.submit(asyncio.run, coro).result(timeout=120)327 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^328/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result329 return self.__get_result()330 ^^^^^^^^^^^^^^^^^^^331/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result332 raise self._exception333/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run334 result = ctx.run(self.task)335 ^^^^^^^^^^^^^^^^^^336/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run337 return fn(*args, **kwargs)338 ^^^^^^^^^^^^^^^^^^^339/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run340 return runner.run(main)341 ^^^^^^^^^^^^^^^^342/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run343 return self._loop.run_until_complete(task)344 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^345/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete346 return future.result()347 ^^^^^^^^^^^^^^^348nixbot/migrations.py:99: in apply_migrations349 migrations = load_migrations()350 ^^^^^^^^^^^^^^^^^351_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 352353 def load_migrations() -> list[Migration]:354 """Load migration scripts shipped with the package, ordered by version."""355 migrations = []356 for entry in resources.files(__package__).joinpath("migrations").iterdir():357 m = _SCRIPT_RE.match(entry.name)358 if m is None:359 continue360 migrations.append(361 Migration(362 version=int(m.group(1)),363 name=m.group(2),364 sql=entry.read_text(),365 )366 )367 migrations.sort(key=lambda mig: mig.version)368 versions = [m.version for m in migrations]369 if len(set(versions)) != len(versions):370 msg = f"Duplicate migration versions: {versions}"371> raise MigrationError(msg)372E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]373374nixbot/migrations.py:67: MigrationError375___________________ ERROR at setup of test_html_error_pages ____________________376[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14377378fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>379request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>380381 @pytest.hookimpl(wrapper=True)382 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:383 if (384 fixturedef.argname == "event_loop_policy"385 and fixturedef.func.__module__ != __name__386 ):387 warnings.warn(388 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),389 )390 asyncio_mode = _get_asyncio_mode(request.config)391 if not _is_asyncio_fixture_function(fixturedef.func):392 if asyncio_mode == Mode.STRICT:393 # Ignore async fixtures without explicit asyncio mark in strict mode394 # This applies to pytest_trio fixtures, for example395 return (yield)396 if not _is_coroutine_or_asyncgen(fixturedef.func):397> return (yield)398 ^^^^^399400/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 401_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 402nixbot/tests/conftest.py:33: in postgres_dsn403 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:404 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^405/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__406 return next(self.gen)407 ^^^^^^^^^^^^^^408nixbot/tests/support.py:327: in ephemeral_postgres409 run_sync(apply_migrations(dsn))410nixbot/tests/support.py:285: in run_sync411 return executor.submit(asyncio.run, coro).result(timeout=120)412 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^413/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result414 return self.__get_result()415 ^^^^^^^^^^^^^^^^^^^416/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result417 raise self._exception418/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run419 result = ctx.run(self.task)420 ^^^^^^^^^^^^^^^^^^421/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run422 return fn(*args, **kwargs)423 ^^^^^^^^^^^^^^^^^^^424/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run425 return runner.run(main)426 ^^^^^^^^^^^^^^^^427/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run428 return self._loop.run_until_complete(task)429 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^430/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete431 return future.result()432 ^^^^^^^^^^^^^^^433nixbot/migrations.py:99: in apply_migrations434 migrations = load_migrations()435 ^^^^^^^^^^^^^^^^^436_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 437438 def load_migrations() -> list[Migration]:439 """Load migration scripts shipped with the package, ordered by version."""440 migrations = []441 for entry in resources.files(__package__).joinpath("migrations").iterdir():442 m = _SCRIPT_RE.match(entry.name)443 if m is None:444 continue445 migrations.append(446 Migration(447 version=int(m.group(1)),448 name=m.group(2),449 sql=entry.read_text(),450 )451 )452 migrations.sort(key=lambda mig: mig.version)453 versions = [m.version for m in migrations]454 if len(set(versions)) != len(versions):455 msg = f"Duplicate migration versions: {versions}"456> raise MigrationError(msg)457E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]458459nixbot/migrations.py:67: MigrationError460____________ ERROR at setup of test_chunk_args_splits_on_byte_limit ____________461[gw23] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14462463fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>464request = <SubRequest 'postgres_dsn' for <Function test_chunk_args_splits_on_byte_limit>>465466 @pytest.hookimpl(wrapper=True)467 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:468 if (469 fixturedef.argname == "event_loop_policy"470 and fixturedef.func.__module__ != __name__471 ):472 warnings.warn(473 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),474 )475 asyncio_mode = _get_asyncio_mode(request.config)476 if not _is_asyncio_fixture_function(fixturedef.func):477 if asyncio_mode == Mode.STRICT:478 # Ignore async fixtures without explicit asyncio mark in strict mode479 # This applies to pytest_trio fixtures, for example480 return (yield)481 if not _is_coroutine_or_asyncgen(fixturedef.func):482> return (yield)483 ^^^^^484485/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 486_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 487nixbot/tests/conftest.py:33: in postgres_dsn488 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:489 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^490/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__491 return next(self.gen)492 ^^^^^^^^^^^^^^493nixbot/tests/support.py:327: in ephemeral_postgres494 run_sync(apply_migrations(dsn))495nixbot/tests/support.py:285: in run_sync496 return executor.submit(asyncio.run, coro).result(timeout=120)497 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^498/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result499 return self.__get_result()500 ^^^^^^^^^^^^^^^^^^^501/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result502 raise self._exception503/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run504 result = ctx.run(self.task)505 ^^^^^^^^^^^^^^^^^^506/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run507 return fn(*args, **kwargs)508 ^^^^^^^^^^^^^^^^^^^509/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run510 return runner.run(main)511 ^^^^^^^^^^^^^^^^512/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run513 return self._loop.run_until_complete(task)514 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^515/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete516 return future.result()517 ^^^^^^^^^^^^^^^518nixbot/migrations.py:99: in apply_migrations519 migrations = load_migrations()520 ^^^^^^^^^^^^^^^^^521_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 522523 def load_migrations() -> list[Migration]:524 """Load migration scripts shipped with the package, ordered by version."""525 migrations = []526 for entry in resources.files(__package__).joinpath("migrations").iterdir():527 m = _SCRIPT_RE.match(entry.name)528 if m is None:529 continue530 migrations.append(531 Migration(532 version=int(m.group(1)),533 name=m.group(2),534 sql=entry.read_text(),535 )536 )537 migrations.sort(key=lambda mig: mig.version)538 versions = [m.version for m in migrations]539 if len(set(versions)) != len(versions):540 msg = f"Duplicate migration versions: {versions}"541> raise MigrationError(msg)542E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]543544nixbot/migrations.py:67: MigrationError545____________________ ERROR at setup of test_full_lifecycle _____________________546[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14547548self = <Coroutine test_full_lifecycle>549550 def setup(self) -> None:551 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"552 if runner_fixture_id not in self.fixturenames:553 self.fixturenames.append(runner_fixture_id)554 # When loop factories are configured, resolve the loop factory555 # fixture early so that a factory variant change cascades cache556 # invalidation before any async fixture checks its cache.557 hook_caller = self.config.hook.pytest_asyncio_loop_factories558 if hook_caller.get_hookimpls():559 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)560> return super().setup()561 ^^^^^^^^^^^^^^^562563/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 564_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 565/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup566 return (yield)567 ^^^^^568nixbot/tests/conftest.py:33: in postgres_dsn569 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:570 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^571/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__572 return next(self.gen)573 ^^^^^^^^^^^^^^574nixbot/tests/support.py:327: in ephemeral_postgres575 run_sync(apply_migrations(dsn))576nixbot/tests/support.py:285: in run_sync577 return executor.submit(asyncio.run, coro).result(timeout=120)578 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^579/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result580 return self.__get_result()581 ^^^^^^^^^^^^^^^^^^^582/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result583 raise self._exception584/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run585 result = ctx.run(self.task)586 ^^^^^^^^^^^^^^^^^^587/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run588 return fn(*args, **kwargs)589 ^^^^^^^^^^^^^^^^^^^590/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run591 return runner.run(main)592 ^^^^^^^^^^^^^^^^593/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run594 return self._loop.run_until_complete(task)595 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^596/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete597 return future.result()598 ^^^^^^^^^^^^^^^599nixbot/migrations.py:99: in apply_migrations600 migrations = load_migrations()601 ^^^^^^^^^^^^^^^^^602_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 603604 def load_migrations() -> list[Migration]:605 """Load migration scripts shipped with the package, ordered by version."""606 migrations = []607 for entry in resources.files(__package__).joinpath("migrations").iterdir():608 m = _SCRIPT_RE.match(entry.name)609 if m is None:610 continue611 migrations.append(612 Migration(613 version=int(m.group(1)),614 name=m.group(2),615 sql=entry.read_text(),616 )617 )618 migrations.sort(key=lambda mig: mig.version)619 versions = [m.version for m in migrations]620 if len(set(versions)) != len(versions):621 msg = f"Duplicate migration versions: {versions}"622> raise MigrationError(msg)623E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]624625nixbot/migrations.py:67: MigrationError626_________________ ERROR at setup of test_repo_list_and_toggle __________________627[gw15] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14628629fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>630request = <SubRequest 'postgres_dsn' for <Function test_repo_list_and_toggle>>631632 @pytest.hookimpl(wrapper=True)633 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:634 if (635 fixturedef.argname == "event_loop_policy"636 and fixturedef.func.__module__ != __name__637 ):638 warnings.warn(639 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),640 )641 asyncio_mode = _get_asyncio_mode(request.config)642 if not _is_asyncio_fixture_function(fixturedef.func):643 if asyncio_mode == Mode.STRICT:644 # Ignore async fixtures without explicit asyncio mark in strict mode645 # This applies to pytest_trio fixtures, for example646 return (yield)647 if not _is_coroutine_or_asyncgen(fixturedef.func):648> return (yield)649 ^^^^^650651/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 652_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 653nixbot/tests/conftest.py:33: in postgres_dsn654 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:655 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^656/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__657 return next(self.gen)658 ^^^^^^^^^^^^^^659nixbot/tests/support.py:327: in ephemeral_postgres660 run_sync(apply_migrations(dsn))661nixbot/tests/support.py:285: in run_sync662 return executor.submit(asyncio.run, coro).result(timeout=120)663 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^664/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result665 return self.__get_result()666 ^^^^^^^^^^^^^^^^^^^667/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result668 raise self._exception669/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run670 result = ctx.run(self.task)671 ^^^^^^^^^^^^^^^^^^672/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run673 return fn(*args, **kwargs)674 ^^^^^^^^^^^^^^^^^^^675/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run676 return runner.run(main)677 ^^^^^^^^^^^^^^^^678/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run679 return self._loop.run_until_complete(task)680 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^681/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete682 return future.result()683 ^^^^^^^^^^^^^^^684nixbot/migrations.py:99: in apply_migrations685 migrations = load_migrations()686 ^^^^^^^^^^^^^^^^^687_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 688689 def load_migrations() -> list[Migration]:690 """Load migration scripts shipped with the package, ordered by version."""691 migrations = []692 for entry in resources.files(__package__).joinpath("migrations").iterdir():693 m = _SCRIPT_RE.match(entry.name)694 if m is None:695 continue696 migrations.append(697 Migration(698 version=int(m.group(1)),699 name=m.group(2),700 sql=entry.read_text(),701 )702 )703 migrations.sort(key=lambda mig: mig.version)704 versions = [m.version for m in migrations]705 if len(set(versions)) != len(versions):706 msg = f"Duplicate migration versions: {versions}"707> raise MigrationError(msg)708E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]709710nixbot/migrations.py:67: MigrationError711______________ ERROR at setup of test_anonymous_sees_public_only _______________712[gw13] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14713714fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>715request = <SubRequest 'postgres_dsn' for <Function test_anonymous_sees_public_only>>716717 @pytest.hookimpl(wrapper=True)718 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:719 if (720 fixturedef.argname == "event_loop_policy"721 and fixturedef.func.__module__ != __name__722 ):723 warnings.warn(724 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),725 )726 asyncio_mode = _get_asyncio_mode(request.config)727 if not _is_asyncio_fixture_function(fixturedef.func):728 if asyncio_mode == Mode.STRICT:729 # Ignore async fixtures without explicit asyncio mark in strict mode730 # This applies to pytest_trio fixtures, for example731 return (yield)732 if not _is_coroutine_or_asyncgen(fixturedef.func):733> return (yield)734 ^^^^^735736/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 737_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 738nixbot/tests/conftest.py:33: in postgres_dsn739 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:740 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^741/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__742 return next(self.gen)743 ^^^^^^^^^^^^^^744nixbot/tests/support.py:327: in ephemeral_postgres745 run_sync(apply_migrations(dsn))746nixbot/tests/support.py:285: in run_sync747 return executor.submit(asyncio.run, coro).result(timeout=120)748 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^749/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result750 return self.__get_result()751 ^^^^^^^^^^^^^^^^^^^752/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result753 raise self._exception754/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run755 result = ctx.run(self.task)756 ^^^^^^^^^^^^^^^^^^757/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run758 return fn(*args, **kwargs)759 ^^^^^^^^^^^^^^^^^^^760/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run761 return runner.run(main)762 ^^^^^^^^^^^^^^^^763/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run764 return self._loop.run_until_complete(task)765 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^766/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete767 return future.result()768 ^^^^^^^^^^^^^^^769nixbot/migrations.py:99: in apply_migrations770 migrations = load_migrations()771 ^^^^^^^^^^^^^^^^^772_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 773774 def load_migrations() -> list[Migration]:775 """Load migration scripts shipped with the package, ordered by version."""776 migrations = []777 for entry in resources.files(__package__).joinpath("migrations").iterdir():778 m = _SCRIPT_RE.match(entry.name)779 if m is None:780 continue781 migrations.append(782 Migration(783 version=int(m.group(1)),784 name=m.group(2),785 sql=entry.read_text(),786 )787 )788 migrations.sort(key=lambda mig: mig.version)789 versions = [m.version for m in migrations]790 if len(set(versions)) != len(versions):791 msg = f"Duplicate migration versions: {versions}"792> raise MigrationError(msg)793E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]794795nixbot/migrations.py:67: MigrationError796_________ ERROR at setup of test_project_store_sync_and_legacy_import __________797[gw5] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14798799self = <Coroutine test_project_store_sync_and_legacy_import>800801 def setup(self) -> None:802 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"803 if runner_fixture_id not in self.fixturenames:804 self.fixturenames.append(runner_fixture_id)805 # When loop factories are configured, resolve the loop factory806 # fixture early so that a factory variant change cascades cache807 # invalidation before any async fixture checks its cache.808 hook_caller = self.config.hook.pytest_asyncio_loop_factories809 if hook_caller.get_hookimpls():810 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)811> return super().setup()812 ^^^^^^^^^^^^^^^813814/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 815_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 816/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup817 return (yield)818 ^^^^^819nixbot/tests/conftest.py:33: in postgres_dsn820 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:821 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^822/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__823 return next(self.gen)824 ^^^^^^^^^^^^^^825nixbot/tests/support.py:327: in ephemeral_postgres826 run_sync(apply_migrations(dsn))827nixbot/tests/support.py:285: in run_sync828 return executor.submit(asyncio.run, coro).result(timeout=120)829 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^830/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result831 return self.__get_result()832 ^^^^^^^^^^^^^^^^^^^833/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result834 raise self._exception835/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run836 result = ctx.run(self.task)837 ^^^^^^^^^^^^^^^^^^838/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run839 return fn(*args, **kwargs)840 ^^^^^^^^^^^^^^^^^^^841/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run842 return runner.run(main)843 ^^^^^^^^^^^^^^^^844/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run845 return self._loop.run_until_complete(task)846 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^847/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete848 return future.result()849 ^^^^^^^^^^^^^^^850nixbot/migrations.py:99: in apply_migrations851 migrations = load_migrations()852 ^^^^^^^^^^^^^^^^^853_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 854855 def load_migrations() -> list[Migration]:856 """Load migration scripts shipped with the package, ordered by version."""857 migrations = []858 for entry in resources.files(__package__).joinpath("migrations").iterdir():859 m = _SCRIPT_RE.match(entry.name)860 if m is None:861 continue862 migrations.append(863 Migration(864 version=int(m.group(1)),865 name=m.group(2),866 sql=entry.read_text(),867 )868 )869 migrations.sort(key=lambda mig: mig.version)870 versions = [m.version for m in migrations]871 if len(set(versions)) != len(versions):872 msg = f"Duplicate migration versions: {versions}"873> raise MigrationError(msg)874E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]875876nixbot/migrations.py:67: MigrationError877___________________ ERROR at setup of test_repos_and_builds ____________________878[gw3] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14879880fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>881request = <SubRequest 'postgres_dsn' for <Function test_repos_and_builds>>882883 @pytest.hookimpl(wrapper=True)884 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:885 if (886 fixturedef.argname == "event_loop_policy"887 and fixturedef.func.__module__ != __name__888 ):889 warnings.warn(890 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),891 )892 asyncio_mode = _get_asyncio_mode(request.config)893 if not _is_asyncio_fixture_function(fixturedef.func):894 if asyncio_mode == Mode.STRICT:895 # Ignore async fixtures without explicit asyncio mark in strict mode896 # This applies to pytest_trio fixtures, for example897 return (yield)898 if not _is_coroutine_or_asyncgen(fixturedef.func):899> return (yield)900 ^^^^^901902/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 903_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 904nixbot/tests/conftest.py:33: in postgres_dsn905 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:906 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^907/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__908 return next(self.gen)909 ^^^^^^^^^^^^^^910nixbot/tests/support.py:327: in ephemeral_postgres911 run_sync(apply_migrations(dsn))912nixbot/tests/support.py:285: in run_sync913 return executor.submit(asyncio.run, coro).result(timeout=120)914 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^915/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result916 return self.__get_result()917 ^^^^^^^^^^^^^^^^^^^918/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result919 raise self._exception920/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run921 result = ctx.run(self.task)922 ^^^^^^^^^^^^^^^^^^923/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run924 return fn(*args, **kwargs)925 ^^^^^^^^^^^^^^^^^^^926/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run927 return runner.run(main)928 ^^^^^^^^^^^^^^^^929/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run930 return self._loop.run_until_complete(task)931 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^932/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete933 return future.result()934 ^^^^^^^^^^^^^^^935nixbot/migrations.py:99: in apply_migrations936 migrations = load_migrations()937 ^^^^^^^^^^^^^^^^^938_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 939940 def load_migrations() -> list[Migration]:941 """Load migration scripts shipped with the package, ordered by version."""942 migrations = []943 for entry in resources.files(__package__).joinpath("migrations").iterdir():944 m = _SCRIPT_RE.match(entry.name)945 if m is None:946 continue947 migrations.append(948 Migration(949 version=int(m.group(1)),950 name=m.group(2),951 sql=entry.read_text(),952 )953 )954 migrations.sort(key=lambda mig: mig.version)955 versions = [m.version for m in migrations]956 if len(set(versions)) != len(versions):957 msg = f"Duplicate migration versions: {versions}"958> raise MigrationError(msg)959E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]960961nixbot/migrations.py:67: MigrationError962_ ERROR at setup of test_replace_schedules_preserves_last_run_for_unchanged_spec _963[gw18] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14964965self = <Coroutine test_replace_schedules_preserves_last_run_for_unchanged_spec>966967 def setup(self) -> None:968 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"969 if runner_fixture_id not in self.fixturenames:970 self.fixturenames.append(runner_fixture_id)971 # When loop factories are configured, resolve the loop factory972 # fixture early so that a factory variant change cascades cache973 # invalidation before any async fixture checks its cache.974 hook_caller = self.config.hook.pytest_asyncio_loop_factories975 if hook_caller.get_hookimpls():976 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)977> return super().setup()978 ^^^^^^^^^^^^^^^979980/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 981_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 982/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup983 return (yield)984 ^^^^^985nixbot/tests/conftest.py:33: in postgres_dsn986 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:987 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^988/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__989 return next(self.gen)990 ^^^^^^^^^^^^^^991nixbot/tests/support.py:327: in ephemeral_postgres992 run_sync(apply_migrations(dsn))993nixbot/tests/support.py:285: in run_sync994 return executor.submit(asyncio.run, coro).result(timeout=120)995 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^996/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result997 return self.__get_result()998 ^^^^^^^^^^^^^^^^^^^999/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1000 raise self._exception1001/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1002 result = ctx.run(self.task)1003 ^^^^^^^^^^^^^^^^^^1004/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1005 return fn(*args, **kwargs)1006 ^^^^^^^^^^^^^^^^^^^1007/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1008 return runner.run(main)1009 ^^^^^^^^^^^^^^^^1010/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1011 return self._loop.run_until_complete(task)1012 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1013/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1014 return future.result()1015 ^^^^^^^^^^^^^^^1016nixbot/migrations.py:99: in apply_migrations1017 migrations = load_migrations()1018 ^^^^^^^^^^^^^^^^^1019_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 10201021 def load_migrations() -> list[Migration]:1022 """Load migration scripts shipped with the package, ordered by version."""1023 migrations = []1024 for entry in resources.files(__package__).joinpath("migrations").iterdir():1025 m = _SCRIPT_RE.match(entry.name)1026 if m is None:1027 continue1028 migrations.append(1029 Migration(1030 version=int(m.group(1)),1031 name=m.group(2),1032 sql=entry.read_text(),1033 )1034 )1035 migrations.sort(key=lambda mig: mig.version)1036 versions = [m.version for m in migrations]1037 if len(set(versions)) != len(versions):1038 msg = f"Duplicate migration versions: {versions}"1039> raise MigrationError(msg)1040E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]10411042nixbot/migrations.py:67: MigrationError1043___________ ERROR at setup of test_failed_migration_error_not_masked ___________1044[gw11] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1410451046self = <Coroutine test_failed_migration_error_not_masked>10471048 def setup(self) -> None:1049 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1050 if runner_fixture_id not in self.fixturenames:1051 self.fixturenames.append(runner_fixture_id)1052 # When loop factories are configured, resolve the loop factory1053 # fixture early so that a factory variant change cascades cache1054 # invalidation before any async fixture checks its cache.1055 hook_caller = self.config.hook.pytest_asyncio_loop_factories1056 if hook_caller.get_hookimpls():1057 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1058> return super().setup()1059 ^^^^^^^^^^^^^^^10601061/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1062_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1063nixbot/tests/conftest.py:33: in postgres_dsn1064 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1065 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1066/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1067 return next(self.gen)1068 ^^^^^^^^^^^^^^1069nixbot/tests/support.py:327: in ephemeral_postgres1070 run_sync(apply_migrations(dsn))1071nixbot/tests/support.py:285: in run_sync1072 return executor.submit(asyncio.run, coro).result(timeout=120)1073 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1074/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1075 return self.__get_result()1076 ^^^^^^^^^^^^^^^^^^^1077/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1078 raise self._exception1079/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1080 result = ctx.run(self.task)1081 ^^^^^^^^^^^^^^^^^^1082/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1083 return fn(*args, **kwargs)1084 ^^^^^^^^^^^^^^^^^^^1085/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1086 return runner.run(main)1087 ^^^^^^^^^^^^^^^^1088/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1089 return self._loop.run_until_complete(task)1090 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1091/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1092 return future.result()1093 ^^^^^^^^^^^^^^^1094nixbot/migrations.py:99: in apply_migrations1095 migrations = load_migrations()1096 ^^^^^^^^^^^^^^^^^1097_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 10981099 def load_migrations() -> list[Migration]:1100 """Load migration scripts shipped with the package, ordered by version."""1101 migrations = []1102 for entry in resources.files(__package__).joinpath("migrations").iterdir():1103 m = _SCRIPT_RE.match(entry.name)1104 if m is None:1105 continue1106 migrations.append(1107 Migration(1108 version=int(m.group(1)),1109 name=m.group(2),1110 sql=entry.read_text(),1111 )1112 )1113 migrations.sort(key=lambda mig: mig.version)1114 versions = [m.version for m in migrations]1115 if len(set(versions)) != len(versions):1116 msg = f"Duplicate migration versions: {versions}"1117> raise MigrationError(msg)1118E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]11191120nixbot/migrations.py:67: MigrationError1121__________________ ERROR at setup of test_match_skip_and_run ___________________1122[gw16] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1411231124self = <Coroutine test_match_skip_and_run>11251126 def setup(self) -> None:1127 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1128 if runner_fixture_id not in self.fixturenames:1129 self.fixturenames.append(runner_fixture_id)1130 # When loop factories are configured, resolve the loop factory1131 # fixture early so that a factory variant change cascades cache1132 # invalidation before any async fixture checks its cache.1133 hook_caller = self.config.hook.pytest_asyncio_loop_factories1134 if hook_caller.get_hookimpls():1135 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1136> return super().setup()1137 ^^^^^^^^^^^^^^^11381139/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1140_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1141/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup1142 return (yield)1143 ^^^^^1144nixbot/tests/conftest.py:33: in postgres_dsn1145 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1146 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1147/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1148 return next(self.gen)1149 ^^^^^^^^^^^^^^1150nixbot/tests/support.py:327: in ephemeral_postgres1151 run_sync(apply_migrations(dsn))1152nixbot/tests/support.py:285: in run_sync1153 return executor.submit(asyncio.run, coro).result(timeout=120)1154 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1155/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1156 return self.__get_result()1157 ^^^^^^^^^^^^^^^^^^^1158/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1159 raise self._exception1160/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1161 result = ctx.run(self.task)1162 ^^^^^^^^^^^^^^^^^^1163/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1164 return fn(*args, **kwargs)1165 ^^^^^^^^^^^^^^^^^^^1166/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1167 return runner.run(main)1168 ^^^^^^^^^^^^^^^^1169/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1170 return self._loop.run_until_complete(task)1171 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1172/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1173 return future.result()1174 ^^^^^^^^^^^^^^^1175nixbot/migrations.py:99: in apply_migrations1176 migrations = load_migrations()1177 ^^^^^^^^^^^^^^^^^1178_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 11791180 def load_migrations() -> list[Migration]:1181 """Load migration scripts shipped with the package, ordered by version."""1182 migrations = []1183 for entry in resources.files(__package__).joinpath("migrations").iterdir():1184 m = _SCRIPT_RE.match(entry.name)1185 if m is None:1186 continue1187 migrations.append(1188 Migration(1189 version=int(m.group(1)),1190 name=m.group(2),1191 sql=entry.read_text(),1192 )1193 )1194 migrations.sort(key=lambda mig: mig.version)1195 versions = [m.version for m in migrations]1196 if len(set(versions)) != len(versions):1197 msg = f"Duplicate migration versions: {versions}"1198> raise MigrationError(msg)1199E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]12001201nixbot/migrations.py:67: MigrationError1202_______ ERROR at setup of test_scheduled_worktree_id_sanitizes_traversal _______1203[gw7] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1412041205request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>1206tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw7'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw7'), _retention_count=3, _retention_policy='all')12071208 @pytest.fixture(scope="module")1209 def postgres_dsn(1210 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1211 ) -> Iterator[str]:1212 if shutil.which("initdb") is None:1213 pytest.skip("postgresql not available")1214 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1215> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1216 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^12171218nixbot/tests/conftest.py:33: 1219_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1220/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1221 return next(self.gen)1222 ^^^^^^^^^^^^^^1223nixbot/tests/support.py:327: in ephemeral_postgres1224 run_sync(apply_migrations(dsn))1225nixbot/tests/support.py:285: in run_sync1226 return executor.submit(asyncio.run, coro).result(timeout=120)1227 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1228/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1229 return self.__get_result()1230 ^^^^^^^^^^^^^^^^^^^1231/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1232 raise self._exception1233/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1234 result = ctx.run(self.task)1235 ^^^^^^^^^^^^^^^^^^1236/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1237 return fn(*args, **kwargs)1238 ^^^^^^^^^^^^^^^^^^^1239/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1240 return runner.run(main)1241 ^^^^^^^^^^^^^^^^1242/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1243 return self._loop.run_until_complete(task)1244 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1245/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1246 return future.result()1247 ^^^^^^^^^^^^^^^1248nixbot/migrations.py:99: in apply_migrations1249 migrations = load_migrations()1250 ^^^^^^^^^^^^^^^^^1251_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 12521253 def load_migrations() -> list[Migration]:1254 """Load migration scripts shipped with the package, ordered by version."""1255 migrations = []1256 for entry in resources.files(__package__).joinpath("migrations").iterdir():1257 m = _SCRIPT_RE.match(entry.name)1258 if m is None:1259 continue1260 migrations.append(1261 Migration(1262 version=int(m.group(1)),1263 name=m.group(2),1264 sql=entry.read_text(),1265 )1266 )1267 migrations.sort(key=lambda mig: mig.version)1268 versions = [m.version for m in migrations]1269 if len(set(versions)) != len(versions):1270 msg = f"Duplicate migration versions: {versions}"1271> raise MigrationError(msg)1272E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]12731274nixbot/migrations.py:67: MigrationError1275_________________ ERROR at setup of test_settle_already_built __________________1276[gw17] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1412771278self = <Coroutine test_settle_already_built>12791280 def setup(self) -> None:1281 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1282 if runner_fixture_id not in self.fixturenames:1283 self.fixturenames.append(runner_fixture_id)1284 # When loop factories are configured, resolve the loop factory1285 # fixture early so that a factory variant change cascades cache1286 # invalidation before any async fixture checks its cache.1287 hook_caller = self.config.hook.pytest_asyncio_loop_factories1288 if hook_caller.get_hookimpls():1289 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1290> return super().setup()1291 ^^^^^^^^^^^^^^^12921293/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1294_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1295nixbot/tests/conftest.py:33: in postgres_dsn1296 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1297 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1298/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1299 return next(self.gen)1300 ^^^^^^^^^^^^^^1301nixbot/tests/support.py:327: in ephemeral_postgres1302 run_sync(apply_migrations(dsn))1303nixbot/tests/support.py:285: in run_sync1304 return executor.submit(asyncio.run, coro).result(timeout=120)1305 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1306/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1307 return self.__get_result()1308 ^^^^^^^^^^^^^^^^^^^1309/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1310 raise self._exception1311/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1312 result = ctx.run(self.task)1313 ^^^^^^^^^^^^^^^^^^1314/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1315 return fn(*args, **kwargs)1316 ^^^^^^^^^^^^^^^^^^^1317/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1318 return runner.run(main)1319 ^^^^^^^^^^^^^^^^1320/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1321 return self._loop.run_until_complete(task)1322 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1323/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1324 return future.result()1325 ^^^^^^^^^^^^^^^1326nixbot/migrations.py:99: in apply_migrations1327 migrations = load_migrations()1328 ^^^^^^^^^^^^^^^^^1329_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 13301331 def load_migrations() -> list[Migration]:1332 """Load migration scripts shipped with the package, ordered by version."""1333 migrations = []1334 for entry in resources.files(__package__).joinpath("migrations").iterdir():1335 m = _SCRIPT_RE.match(entry.name)1336 if m is None:1337 continue1338 migrations.append(1339 Migration(1340 version=int(m.group(1)),1341 name=m.group(2),1342 sql=entry.read_text(),1343 )1344 )1345 migrations.sort(key=lambda mig: mig.version)1346 versions = [m.version for m in migrations]1347 if len(set(versions)) != len(versions):1348 msg = f"Duplicate migration versions: {versions}"1349> raise MigrationError(msg)1350E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]13511352nixbot/migrations.py:67: MigrationError1353_____________ ERROR at setup of test_parse_path_info_both_formats ______________1354[gw23] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1413551356request = <SubRequest 'postgres_dsn' for <Function test_chunk_args_splits_on_byte_limit>>1357tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw23'), _trace=<pluggy._tracing.TagT...96e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw23'), _retention_count=3, _retention_policy='all')13581359 @pytest.fixture(scope="module")1360 def postgres_dsn(1361 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1362 ) -> Iterator[str]:1363 if shutil.which("initdb") is None:1364 pytest.skip("postgresql not available")1365 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1366> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1367 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^13681369nixbot/tests/conftest.py:33: 1370_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1371/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1372 return next(self.gen)1373 ^^^^^^^^^^^^^^1374nixbot/tests/support.py:327: in ephemeral_postgres1375 run_sync(apply_migrations(dsn))1376nixbot/tests/support.py:285: in run_sync1377 return executor.submit(asyncio.run, coro).result(timeout=120)1378 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1379/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1380 return self.__get_result()1381 ^^^^^^^^^^^^^^^^^^^1382/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1383 raise self._exception1384/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1385 result = ctx.run(self.task)1386 ^^^^^^^^^^^^^^^^^^1387/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1388 return fn(*args, **kwargs)1389 ^^^^^^^^^^^^^^^^^^^1390/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1391 return runner.run(main)1392 ^^^^^^^^^^^^^^^^1393/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1394 return self._loop.run_until_complete(task)1395 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1396/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1397 return future.result()1398 ^^^^^^^^^^^^^^^1399nixbot/migrations.py:99: in apply_migrations1400 migrations = load_migrations()1401 ^^^^^^^^^^^^^^^^^1402_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 14031404 def load_migrations() -> list[Migration]:1405 """Load migration scripts shipped with the package, ordered by version."""1406 migrations = []1407 for entry in resources.files(__package__).joinpath("migrations").iterdir():1408 m = _SCRIPT_RE.match(entry.name)1409 if m is None:1410 continue1411 migrations.append(1412 Migration(1413 version=int(m.group(1)),1414 name=m.group(2),1415 sql=entry.read_text(),1416 )1417 )1418 migrations.sort(key=lambda mig: mig.version)1419 versions = [m.version for m in migrations]1420 if len(set(versions)) != len(versions):1421 msg = f"Duplicate migration versions: {versions}"1422> raise MigrationError(msg)1423E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]14241425nixbot/migrations.py:67: MigrationError1426_______ ERROR at setup of test_control_buttons_hidden_without_permission _______1427[gw4] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1414281429fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>1430request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>14311432 @pytest.hookimpl(wrapper=True)1433 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:1434 if (1435 fixturedef.argname == "event_loop_policy"1436 and fixturedef.func.__module__ != __name__1437 ):1438 warnings.warn(1439 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),1440 )1441 asyncio_mode = _get_asyncio_mode(request.config)1442 if not _is_asyncio_fixture_function(fixturedef.func):1443 if asyncio_mode == Mode.STRICT:1444 # Ignore async fixtures without explicit asyncio mark in strict mode1445 # This applies to pytest_trio fixtures, for example1446 return (yield)1447 if not _is_coroutine_or_asyncgen(fixturedef.func):1448> return (yield)1449 ^^^^^14501451/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 1452_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1453nixbot/tests/conftest.py:33: in postgres_dsn1454 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1455 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1456/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1457 return next(self.gen)1458 ^^^^^^^^^^^^^^1459nixbot/tests/support.py:327: in ephemeral_postgres1460 run_sync(apply_migrations(dsn))1461nixbot/tests/support.py:285: in run_sync1462 return executor.submit(asyncio.run, coro).result(timeout=120)1463 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1464/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1465 return self.__get_result()1466 ^^^^^^^^^^^^^^^^^^^1467/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1468 raise self._exception1469/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1470 result = ctx.run(self.task)1471 ^^^^^^^^^^^^^^^^^^1472/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1473 return fn(*args, **kwargs)1474 ^^^^^^^^^^^^^^^^^^^1475/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1476 return runner.run(main)1477 ^^^^^^^^^^^^^^^^1478/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1479 return self._loop.run_until_complete(task)1480 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1481/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1482 return future.result()1483 ^^^^^^^^^^^^^^^1484nixbot/migrations.py:99: in apply_migrations1485 migrations = load_migrations()1486 ^^^^^^^^^^^^^^^^^1487_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 14881489 def load_migrations() -> list[Migration]:1490 """Load migration scripts shipped with the package, ordered by version."""1491 migrations = []1492 for entry in resources.files(__package__).joinpath("migrations").iterdir():1493 m = _SCRIPT_RE.match(entry.name)1494 if m is None:1495 continue1496 migrations.append(1497 Migration(1498 version=int(m.group(1)),1499 name=m.group(2),1500 sql=entry.read_text(),1501 )1502 )1503 migrations.sort(key=lambda mig: mig.version)1504 versions = [m.version for m in migrations]1505 if len(set(versions)) != len(versions):1506 msg = f"Duplicate migration versions: {versions}"1507> raise MigrationError(msg)1508E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]15091510nixbot/migrations.py:67: MigrationError1511______________ ERROR at setup of test_api_strips_ansi_from_errors ______________1512[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1415131514request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>1515tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')15161517 @pytest.fixture(scope="module")1518 def postgres_dsn(1519 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1520 ) -> Iterator[str]:1521 if shutil.which("initdb") is None:1522 pytest.skip("postgresql not available")1523 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1524> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1525 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^15261527nixbot/tests/conftest.py:33: 1528_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1529/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1530 return next(self.gen)1531 ^^^^^^^^^^^^^^1532nixbot/tests/support.py:327: in ephemeral_postgres1533 run_sync(apply_migrations(dsn))1534nixbot/tests/support.py:285: in run_sync1535 return executor.submit(asyncio.run, coro).result(timeout=120)1536 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1537/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1538 return self.__get_result()1539 ^^^^^^^^^^^^^^^^^^^1540/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1541 raise self._exception1542/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1543 result = ctx.run(self.task)1544 ^^^^^^^^^^^^^^^^^^1545/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1546 return fn(*args, **kwargs)1547 ^^^^^^^^^^^^^^^^^^^1548/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1549 return runner.run(main)1550 ^^^^^^^^^^^^^^^^1551/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1552 return self._loop.run_until_complete(task)1553 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1554/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1555 return future.result()1556 ^^^^^^^^^^^^^^^1557nixbot/migrations.py:99: in apply_migrations1558 migrations = load_migrations()1559 ^^^^^^^^^^^^^^^^^1560_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15611562 def load_migrations() -> list[Migration]:1563 """Load migration scripts shipped with the package, ordered by version."""1564 migrations = []1565 for entry in resources.files(__package__).joinpath("migrations").iterdir():1566 m = _SCRIPT_RE.match(entry.name)1567 if m is None:1568 continue1569 migrations.append(1570 Migration(1571 version=int(m.group(1)),1572 name=m.group(2),1573 sql=entry.read_text(),1574 )1575 )1576 migrations.sort(key=lambda mig: mig.version)1577 versions = [m.version for m in migrations]1578 if len(set(versions)) != len(versions):1579 msg = f"Duplicate migration versions: {versions}"1580> raise MigrationError(msg)1581E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]15821583nixbot/migrations.py:67: MigrationError1584_______ ERROR at setup of test_homepage_lists_project_and_recent_builds ________1585[gw20] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1415861587fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>1588request = <SubRequest 'postgres_dsn' for <Function test_homepage_lists_project_and_recent_builds>>15891590 @pytest.hookimpl(wrapper=True)1591 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:1592 if (1593 fixturedef.argname == "event_loop_policy"1594 and fixturedef.func.__module__ != __name__1595 ):1596 warnings.warn(1597 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),1598 )1599 asyncio_mode = _get_asyncio_mode(request.config)1600 if not _is_asyncio_fixture_function(fixturedef.func):1601 if asyncio_mode == Mode.STRICT:1602 # Ignore async fixtures without explicit asyncio mark in strict mode1603 # This applies to pytest_trio fixtures, for example1604 return (yield)1605 if not _is_coroutine_or_asyncgen(fixturedef.func):1606> return (yield)1607 ^^^^^16081609/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 1610_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1611nixbot/tests/conftest.py:33: in postgres_dsn1612 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1613 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1614/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1615 return next(self.gen)1616 ^^^^^^^^^^^^^^1617nixbot/tests/support.py:327: in ephemeral_postgres1618 run_sync(apply_migrations(dsn))1619nixbot/tests/support.py:285: in run_sync1620 return executor.submit(asyncio.run, coro).result(timeout=120)1621 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1622/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1623 return self.__get_result()1624 ^^^^^^^^^^^^^^^^^^^1625/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1626 raise self._exception1627/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1628 result = ctx.run(self.task)1629 ^^^^^^^^^^^^^^^^^^1630/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1631 return fn(*args, **kwargs)1632 ^^^^^^^^^^^^^^^^^^^1633/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1634 return runner.run(main)1635 ^^^^^^^^^^^^^^^^1636/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1637 return self._loop.run_until_complete(task)1638 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1639/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1640 return future.result()1641 ^^^^^^^^^^^^^^^1642nixbot/migrations.py:99: in apply_migrations1643 migrations = load_migrations()1644 ^^^^^^^^^^^^^^^^^1645_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 16461647 def load_migrations() -> list[Migration]:1648 """Load migration scripts shipped with the package, ordered by version."""1649 migrations = []1650 for entry in resources.files(__package__).joinpath("migrations").iterdir():1651 m = _SCRIPT_RE.match(entry.name)1652 if m is None:1653 continue1654 migrations.append(1655 Migration(1656 version=int(m.group(1)),1657 name=m.group(2),1658 sql=entry.read_text(),1659 )1660 )1661 migrations.sort(key=lambda mig: mig.version)1662 versions = [m.version for m in migrations]1663 if len(set(versions)) != len(versions):1664 msg = f"Duplicate migration versions: {versions}"1665> raise MigrationError(msg)1666E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]16671668nixbot/migrations.py:67: MigrationError1669---------------------------- Captured stderr setup -----------------------------1670Skipping host requirements validation logic because `PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS` env variable is set.1671__________ ERROR at setup of test_unauthorized_user_sees_public_only ___________1672[gw13] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1416731674request = <SubRequest 'postgres_dsn' for <Function test_anonymous_sees_public_only>>1675tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=<pluggy._tracing.TagT...96e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all')16761677 @pytest.fixture(scope="module")1678 def postgres_dsn(1679 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1680 ) -> Iterator[str]:1681 if shutil.which("initdb") is None:1682 pytest.skip("postgresql not available")1683 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1684> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1685 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^16861687nixbot/tests/conftest.py:33: 1688_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1689/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1690 return next(self.gen)1691 ^^^^^^^^^^^^^^1692nixbot/tests/support.py:327: in ephemeral_postgres1693 run_sync(apply_migrations(dsn))1694nixbot/tests/support.py:285: in run_sync1695 return executor.submit(asyncio.run, coro).result(timeout=120)1696 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1697/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1698 return self.__get_result()1699 ^^^^^^^^^^^^^^^^^^^1700/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1701 raise self._exception1702/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1703 result = ctx.run(self.task)1704 ^^^^^^^^^^^^^^^^^^1705/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1706 return fn(*args, **kwargs)1707 ^^^^^^^^^^^^^^^^^^^1708/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1709 return runner.run(main)1710 ^^^^^^^^^^^^^^^^1711/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1712 return self._loop.run_until_complete(task)1713 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1714/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1715 return future.result()1716 ^^^^^^^^^^^^^^^1717nixbot/migrations.py:99: in apply_migrations1718 migrations = load_migrations()1719 ^^^^^^^^^^^^^^^^^1720_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 17211722 def load_migrations() -> list[Migration]:1723 """Load migration scripts shipped with the package, ordered by version."""1724 migrations = []1725 for entry in resources.files(__package__).joinpath("migrations").iterdir():1726 m = _SCRIPT_RE.match(entry.name)1727 if m is None:1728 continue1729 migrations.append(1730 Migration(1731 version=int(m.group(1)),1732 name=m.group(2),1733 sql=entry.read_text(),1734 )1735 )1736 migrations.sort(key=lambda mig: mig.version)1737 versions = [m.version for m in migrations]1738 if len(set(versions)) != len(versions):1739 msg = f"Duplicate migration versions: {versions}"1740> raise MigrationError(msg)1741E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]17421743nixbot/migrations.py:67: MigrationError1744__________________ ERROR at setup of test_build_list_and_view __________________1745[gw15] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1417461747request = <SubRequest 'postgres_dsn' for <Function test_repo_list_and_toggle>>1748tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _trace=<pluggy._tracing.TagT...96e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _retention_count=3, _retention_policy='all')17491750 @pytest.fixture(scope="module")1751 def postgres_dsn(1752 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1753 ) -> Iterator[str]:1754 if shutil.which("initdb") is None:1755 pytest.skip("postgresql not available")1756 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1757> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1758 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^17591760nixbot/tests/conftest.py:33: 1761_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1762/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1763 return next(self.gen)1764 ^^^^^^^^^^^^^^1765nixbot/tests/support.py:327: in ephemeral_postgres1766 run_sync(apply_migrations(dsn))1767nixbot/tests/support.py:285: in run_sync1768 return executor.submit(asyncio.run, coro).result(timeout=120)1769 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1770/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1771 return self.__get_result()1772 ^^^^^^^^^^^^^^^^^^^1773/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1774 raise self._exception1775/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1776 result = ctx.run(self.task)1777 ^^^^^^^^^^^^^^^^^^1778/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1779 return fn(*args, **kwargs)1780 ^^^^^^^^^^^^^^^^^^^1781/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1782 return runner.run(main)1783 ^^^^^^^^^^^^^^^^1784/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1785 return self._loop.run_until_complete(task)1786 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1787/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1788 return future.result()1789 ^^^^^^^^^^^^^^^1790nixbot/migrations.py:99: in apply_migrations1791 migrations = load_migrations()1792 ^^^^^^^^^^^^^^^^^1793_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 17941795 def load_migrations() -> list[Migration]:1796 """Load migration scripts shipped with the package, ordered by version."""1797 migrations = []1798 for entry in resources.files(__package__).joinpath("migrations").iterdir():1799 m = _SCRIPT_RE.match(entry.name)1800 if m is None:1801 continue1802 migrations.append(1803 Migration(1804 version=int(m.group(1)),1805 name=m.group(2),1806 sql=entry.read_text(),1807 )1808 )1809 migrations.sort(key=lambda mig: mig.version)1810 versions = [m.version for m in migrations]1811 if len(set(versions)) != len(versions):1812 msg = f"Duplicate migration versions: {versions}"1813> raise MigrationError(msg)1814E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]18151816nixbot/migrations.py:67: MigrationError1817__________________ ERROR at setup of test_failure_aggregation __________________1818[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1418191820self = <Coroutine test_failure_aggregation>18211822 def setup(self) -> None:1823 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1824 if runner_fixture_id not in self.fixturenames:1825 self.fixturenames.append(runner_fixture_id)1826 # When loop factories are configured, resolve the loop factory1827 # fixture early so that a factory variant change cascades cache1828 # invalidation before any async fixture checks its cache.1829 hook_caller = self.config.hook.pytest_asyncio_loop_factories1830 if hook_caller.get_hookimpls():1831 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1832> return super().setup()1833 ^^^^^^^^^^^^^^^18341835/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1836_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1837nixbot/tests/conftest.py:33: in postgres_dsn1838 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1839 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1840/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1841 return next(self.gen)1842 ^^^^^^^^^^^^^^1843nixbot/tests/support.py:327: in ephemeral_postgres1844 run_sync(apply_migrations(dsn))1845nixbot/tests/support.py:285: in run_sync1846 return executor.submit(asyncio.run, coro).result(timeout=120)1847 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1848/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1849 return self.__get_result()1850 ^^^^^^^^^^^^^^^^^^^1851/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1852 raise self._exception1853/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1854 result = ctx.run(self.task)1855 ^^^^^^^^^^^^^^^^^^1856/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1857 return fn(*args, **kwargs)1858 ^^^^^^^^^^^^^^^^^^^1859/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1860 return runner.run(main)1861 ^^^^^^^^^^^^^^^^1862/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1863 return self._loop.run_until_complete(task)1864 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1865/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1866 return future.result()1867 ^^^^^^^^^^^^^^^1868nixbot/migrations.py:99: in apply_migrations1869 migrations = load_migrations()1870 ^^^^^^^^^^^^^^^^^1871_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 18721873 def load_migrations() -> list[Migration]:1874 """Load migration scripts shipped with the package, ordered by version."""1875 migrations = []1876 for entry in resources.files(__package__).joinpath("migrations").iterdir():1877 m = _SCRIPT_RE.match(entry.name)1878 if m is None:1879 continue1880 migrations.append(1881 Migration(1882 version=int(m.group(1)),1883 name=m.group(2),1884 sql=entry.read_text(),1885 )1886 )1887 migrations.sort(key=lambda mig: mig.version)1888 versions = [m.version for m in migrations]1889 if len(set(versions)) != len(versions):1890 msg = f"Duplicate migration versions: {versions}"1891> raise MigrationError(msg)1892E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]18931894nixbot/migrations.py:67: MigrationError1895_________________ ERROR at setup of test_finished_attrs_cursor _________________1896[gw3] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1418971898request = <SubRequest 'postgres_dsn' for <Function test_repos_and_builds>>1899tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw3'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw3'), _retention_count=3, _retention_policy='all')19001901 @pytest.fixture(scope="module")1902 def postgres_dsn(1903 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1904 ) -> Iterator[str]:1905 if shutil.which("initdb") is None:1906 pytest.skip("postgresql not available")1907 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1908> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1909 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^19101911nixbot/tests/conftest.py:33: 1912_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1913/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1914 return next(self.gen)1915 ^^^^^^^^^^^^^^1916nixbot/tests/support.py:327: in ephemeral_postgres1917 run_sync(apply_migrations(dsn))1918nixbot/tests/support.py:285: in run_sync1919 return executor.submit(asyncio.run, coro).result(timeout=120)1920 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1921/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1922 return self.__get_result()1923 ^^^^^^^^^^^^^^^^^^^1924/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1925 raise self._exception1926/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1927 result = ctx.run(self.task)1928 ^^^^^^^^^^^^^^^^^^1929/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1930 return fn(*args, **kwargs)1931 ^^^^^^^^^^^^^^^^^^^1932/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1933 return runner.run(main)1934 ^^^^^^^^^^^^^^^^1935/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1936 return self._loop.run_until_complete(task)1937 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1938/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1939 return future.result()1940 ^^^^^^^^^^^^^^^1941nixbot/migrations.py:99: in apply_migrations1942 migrations = load_migrations()1943 ^^^^^^^^^^^^^^^^^1944_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 19451946 def load_migrations() -> list[Migration]:1947 """Load migration scripts shipped with the package, ordered by version."""1948 migrations = []1949 for entry in resources.files(__package__).joinpath("migrations").iterdir():1950 m = _SCRIPT_RE.match(entry.name)1951 if m is None:1952 continue1953 migrations.append(1954 Migration(1955 version=int(m.group(1)),1956 name=m.group(2),1957 sql=entry.read_text(),1958 )1959 )1960 migrations.sort(key=lambda mig: mig.version)1961 versions = [m.version for m in migrations]1962 if len(set(versions)) != len(versions):1963 msg = f"Duplicate migration versions: {versions}"1964> raise MigrationError(msg)1965E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]19661967nixbot/migrations.py:67: MigrationError1968________________ ERROR at setup of test_resolve_credential_path ________________1969[gw7] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1419701971request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>1972tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw7'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw7'), _retention_count=3, _retention_policy='all')19731974 @pytest.fixture(scope="module")1975 def postgres_dsn(1976 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1977 ) -> Iterator[str]:1978 if shutil.which("initdb") is None:1979 pytest.skip("postgresql not available")1980 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1981> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1982 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^19831984nixbot/tests/conftest.py:33: 1985_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1986/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1987 return next(self.gen)1988 ^^^^^^^^^^^^^^1989nixbot/tests/support.py:327: in ephemeral_postgres1990 run_sync(apply_migrations(dsn))1991nixbot/tests/support.py:285: in run_sync1992 return executor.submit(asyncio.run, coro).result(timeout=120)1993 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1994/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1995 return self.__get_result()1996 ^^^^^^^^^^^^^^^^^^^1997/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1998 raise self._exception1999/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run2000 result = ctx.run(self.task)loading 21,667 hidden lines…
23668 msg = f"Duplicate migration versions: {versions}"23669> raise MigrationError(msg)23670E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2367123672nixbot/migrations.py:67: MigrationError23673_______ ERROR at setup of test_unexpected_eval_path_error_settles_build ________23674[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142367523676self = <Coroutine test_unexpected_eval_path_error_settles_build>2367723678 def setup(self) -> None:23679 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23680 if runner_fixture_id not in self.fixturenames:23681 self.fixturenames.append(runner_fixture_id)23682 # When loop factories are configured, resolve the loop factory23683 # fixture early so that a factory variant change cascades cache23684 # invalidation before any async fixture checks its cache.23685 hook_caller = self.config.hook.pytest_asyncio_loop_factories23686 if hook_caller.get_hookimpls():23687 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23688> return super().setup()23689 ^^^^^^^^^^^^^^^2369023691/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23692_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23693nixbot/tests/conftest.py:33: in postgres_dsn23694 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23695 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23696/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23697 return next(self.gen)23698 ^^^^^^^^^^^^^^23699nixbot/tests/support.py:327: in ephemeral_postgres23700 run_sync(apply_migrations(dsn))23701nixbot/tests/support.py:285: in run_sync23702 return executor.submit(asyncio.run, coro).result(timeout=120)23703 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23704/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23705 return self.__get_result()23706 ^^^^^^^^^^^^^^^^^^^23707/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23708 raise self._exception23709/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23710 result = ctx.run(self.task)23711 ^^^^^^^^^^^^^^^^^^23712/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23713 return fn(*args, **kwargs)23714 ^^^^^^^^^^^^^^^^^^^23715/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23716 return runner.run(main)23717 ^^^^^^^^^^^^^^^^23718/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23719 return self._loop.run_until_complete(task)23720 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23721/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23722 return future.result()23723 ^^^^^^^^^^^^^^^23724nixbot/migrations.py:99: in apply_migrations23725 migrations = load_migrations()23726 ^^^^^^^^^^^^^^^^^23727_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2372823729 def load_migrations() -> list[Migration]:23730 """Load migration scripts shipped with the package, ordered by version."""23731 migrations = []23732 for entry in resources.files(__package__).joinpath("migrations").iterdir():23733 m = _SCRIPT_RE.match(entry.name)23734 if m is None:23735 continue23736 migrations.append(23737 Migration(23738 version=int(m.group(1)),23739 name=m.group(2),23740 sql=entry.read_text(),23741 )23742 )23743 migrations.sort(key=lambda mig: mig.version)23744 versions = [m.version for m in migrations]23745 if len(set(versions)) != len(versions):23746 msg = f"Duplicate migration versions: {versions}"23747> raise MigrationError(msg)23748E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2374923750nixbot/migrations.py:67: MigrationError23751___________________ ERROR at setup of test_attribute_search ____________________23752[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142375323754request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23755tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2375623757 @pytest.fixture(scope="module")23758 def postgres_dsn(23759 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23760 ) -> Iterator[str]:23761 if shutil.which("initdb") is None:23762 pytest.skip("postgresql not available")23763 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23764> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23765 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2376623767nixbot/tests/conftest.py:33: 23768_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23769/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23770 return next(self.gen)23771 ^^^^^^^^^^^^^^23772nixbot/tests/support.py:327: in ephemeral_postgres23773 run_sync(apply_migrations(dsn))23774nixbot/tests/support.py:285: in run_sync23775 return executor.submit(asyncio.run, coro).result(timeout=120)23776 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23777/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23778 return self.__get_result()23779 ^^^^^^^^^^^^^^^^^^^23780/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23781 raise self._exception23782/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23783 result = ctx.run(self.task)23784 ^^^^^^^^^^^^^^^^^^23785/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23786 return fn(*args, **kwargs)23787 ^^^^^^^^^^^^^^^^^^^23788/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23789 return runner.run(main)23790 ^^^^^^^^^^^^^^^^23791/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23792 return self._loop.run_until_complete(task)23793 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23794/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23795 return future.result()23796 ^^^^^^^^^^^^^^^23797nixbot/migrations.py:99: in apply_migrations23798 migrations = load_migrations()23799 ^^^^^^^^^^^^^^^^^23800_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2380123802 def load_migrations() -> list[Migration]:23803 """Load migration scripts shipped with the package, ordered by version."""23804 migrations = []23805 for entry in resources.files(__package__).joinpath("migrations").iterdir():23806 m = _SCRIPT_RE.match(entry.name)23807 if m is None:23808 continue23809 migrations.append(23810 Migration(23811 version=int(m.group(1)),23812 name=m.group(2),23813 sql=entry.read_text(),23814 )23815 )23816 migrations.sort(key=lambda mig: mig.version)23817 versions = [m.version for m in migrations]23818 if len(set(versions)) != len(versions):23819 msg = f"Duplicate migration versions: {versions}"23820> raise MigrationError(msg)23821E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2382223823nixbot/migrations.py:67: MigrationError23824____ ERROR at setup of test_reuse_empty_succeeded_build_posts_eval_success _____23825[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142382623827self = <Coroutine test_reuse_empty_succeeded_build_posts_eval_success>2382823829 def setup(self) -> None:23830 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23831 if runner_fixture_id not in self.fixturenames:23832 self.fixturenames.append(runner_fixture_id)23833 # When loop factories are configured, resolve the loop factory23834 # fixture early so that a factory variant change cascades cache23835 # invalidation before any async fixture checks its cache.23836 hook_caller = self.config.hook.pytest_asyncio_loop_factories23837 if hook_caller.get_hookimpls():23838 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23839> return super().setup()23840 ^^^^^^^^^^^^^^^2384123842/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23843_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23844nixbot/tests/conftest.py:33: in postgres_dsn23845 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23846 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23847/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23848 return next(self.gen)23849 ^^^^^^^^^^^^^^23850nixbot/tests/support.py:327: in ephemeral_postgres23851 run_sync(apply_migrations(dsn))23852nixbot/tests/support.py:285: in run_sync23853 return executor.submit(asyncio.run, coro).result(timeout=120)23854 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23855/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23856 return self.__get_result()23857 ^^^^^^^^^^^^^^^^^^^23858/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23859 raise self._exception23860/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23861 result = ctx.run(self.task)23862 ^^^^^^^^^^^^^^^^^^23863/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23864 return fn(*args, **kwargs)23865 ^^^^^^^^^^^^^^^^^^^23866/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23867 return runner.run(main)23868 ^^^^^^^^^^^^^^^^23869/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23870 return self._loop.run_until_complete(task)23871 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23872/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23873 return future.result()23874 ^^^^^^^^^^^^^^^23875nixbot/migrations.py:99: in apply_migrations23876 migrations = load_migrations()23877 ^^^^^^^^^^^^^^^^^23878_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2387923880 def load_migrations() -> list[Migration]:23881 """Load migration scripts shipped with the package, ordered by version."""23882 migrations = []23883 for entry in resources.files(__package__).joinpath("migrations").iterdir():23884 m = _SCRIPT_RE.match(entry.name)23885 if m is None:23886 continue23887 migrations.append(23888 Migration(23889 version=int(m.group(1)),23890 name=m.group(2),23891 sql=entry.read_text(),23892 )23893 )23894 migrations.sort(key=lambda mig: mig.version)23895 versions = [m.version for m in migrations]23896 if len(set(versions)) != len(versions):23897 msg = f"Duplicate migration versions: {versions}"23898> raise MigrationError(msg)23899E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2390023901nixbot/migrations.py:67: MigrationError23902_______________ ERROR at setup of test_build_page_shows_effects ________________23903[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142390423905request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23906tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2390723908 @pytest.fixture(scope="module")23909 def postgres_dsn(23910 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23911 ) -> Iterator[str]:23912 if shutil.which("initdb") is None:23913 pytest.skip("postgresql not available")23914 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23915> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23916 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2391723918nixbot/tests/conftest.py:33: 23919_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23920/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23921 return next(self.gen)23922 ^^^^^^^^^^^^^^23923nixbot/tests/support.py:327: in ephemeral_postgres23924 run_sync(apply_migrations(dsn))23925nixbot/tests/support.py:285: in run_sync23926 return executor.submit(asyncio.run, coro).result(timeout=120)23927 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23928/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23929 return self.__get_result()23930 ^^^^^^^^^^^^^^^^^^^23931/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23932 raise self._exception23933/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23934 result = ctx.run(self.task)23935 ^^^^^^^^^^^^^^^^^^23936/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23937 return fn(*args, **kwargs)23938 ^^^^^^^^^^^^^^^^^^^23939/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23940 return runner.run(main)23941 ^^^^^^^^^^^^^^^^23942/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23943 return self._loop.run_until_complete(task)23944 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23945/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23946 return future.result()23947 ^^^^^^^^^^^^^^^23948nixbot/migrations.py:99: in apply_migrations23949 migrations = load_migrations()23950 ^^^^^^^^^^^^^^^^^23951_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2395223953 def load_migrations() -> list[Migration]:23954 """Load migration scripts shipped with the package, ordered by version."""23955 migrations = []23956 for entry in resources.files(__package__).joinpath("migrations").iterdir():23957 m = _SCRIPT_RE.match(entry.name)23958 if m is None:23959 continue23960 migrations.append(23961 Migration(23962 version=int(m.group(1)),23963 name=m.group(2),23964 sql=entry.read_text(),23965 )23966 )23967 migrations.sort(key=lambda mig: mig.version)23968 versions = [m.version for m in migrations]23969 if len(set(versions)) != len(versions):23970 msg = f"Duplicate migration versions: {versions}"23971> raise MigrationError(msg)23972E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2397323974nixbot/migrations.py:67: MigrationError23975__ ERROR at setup of test_stale_event_reusing_old_build_does_not_cancel_newer __23976[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142397723978self = <Coroutine test_stale_event_reusing_old_build_does_not_cancel_newer>2397923980 def setup(self) -> None:23981 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23982 if runner_fixture_id not in self.fixturenames:23983 self.fixturenames.append(runner_fixture_id)23984 # When loop factories are configured, resolve the loop factory23985 # fixture early so that a factory variant change cascades cache23986 # invalidation before any async fixture checks its cache.23987 hook_caller = self.config.hook.pytest_asyncio_loop_factories23988 if hook_caller.get_hookimpls():23989 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23990> return super().setup()23991 ^^^^^^^^^^^^^^^2399223993/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23994_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23995nixbot/tests/conftest.py:33: in postgres_dsn23996 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23997 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23998/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23999 return next(self.gen)24000 ^^^^^^^^^^^^^^24001nixbot/tests/support.py:327: in ephemeral_postgres24002 run_sync(apply_migrations(dsn))24003nixbot/tests/support.py:285: in run_sync24004 return executor.submit(asyncio.run, coro).result(timeout=120)24005 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24006/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24007 return self.__get_result()24008 ^^^^^^^^^^^^^^^^^^^24009/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24010 raise self._exception24011/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24012 result = ctx.run(self.task)24013 ^^^^^^^^^^^^^^^^^^24014/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24015 return fn(*args, **kwargs)24016 ^^^^^^^^^^^^^^^^^^^24017/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24018 return runner.run(main)24019 ^^^^^^^^^^^^^^^^24020/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24021 return self._loop.run_until_complete(task)24022 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24023/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24024 return future.result()24025 ^^^^^^^^^^^^^^^24026nixbot/migrations.py:99: in apply_migrations24027 migrations = load_migrations()24028 ^^^^^^^^^^^^^^^^^24029_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2403024031 def load_migrations() -> list[Migration]:24032 """Load migration scripts shipped with the package, ordered by version."""24033 migrations = []24034 for entry in resources.files(__package__).joinpath("migrations").iterdir():24035 m = _SCRIPT_RE.match(entry.name)24036 if m is None:24037 continue24038 migrations.append(24039 Migration(24040 version=int(m.group(1)),24041 name=m.group(2),24042 sql=entry.read_text(),24043 )24044 )24045 migrations.sort(key=lambda mig: mig.version)24046 versions = [m.version for m in migrations]24047 if len(set(versions)) != len(versions):24048 msg = f"Duplicate migration versions: {versions}"24049> raise MigrationError(msg)24050E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2405124052nixbot/migrations.py:67: MigrationError24053____________ ERROR at setup of test_build_page_shows_event_effects _____________24054[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142405524056request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24057tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2405824059 @pytest.fixture(scope="module")24060 def postgres_dsn(24061 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24062 ) -> Iterator[str]:24063 if shutil.which("initdb") is None:24064 pytest.skip("postgresql not available")24065 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24066> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24067 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2406824069nixbot/tests/conftest.py:33: 24070_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24071/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24072 return next(self.gen)24073 ^^^^^^^^^^^^^^24074nixbot/tests/support.py:327: in ephemeral_postgres24075 run_sync(apply_migrations(dsn))24076nixbot/tests/support.py:285: in run_sync24077 return executor.submit(asyncio.run, coro).result(timeout=120)24078 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24079/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24080 return self.__get_result()24081 ^^^^^^^^^^^^^^^^^^^24082/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24083 raise self._exception24084/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24085 result = ctx.run(self.task)24086 ^^^^^^^^^^^^^^^^^^24087/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24088 return fn(*args, **kwargs)24089 ^^^^^^^^^^^^^^^^^^^24090/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24091 return runner.run(main)24092 ^^^^^^^^^^^^^^^^24093/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24094 return self._loop.run_until_complete(task)24095 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24096/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24097 return future.result()24098 ^^^^^^^^^^^^^^^24099nixbot/migrations.py:99: in apply_migrations24100 migrations = load_migrations()24101 ^^^^^^^^^^^^^^^^^24102_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2410324104 def load_migrations() -> list[Migration]:24105 """Load migration scripts shipped with the package, ordered by version."""24106 migrations = []24107 for entry in resources.files(__package__).joinpath("migrations").iterdir():24108 m = _SCRIPT_RE.match(entry.name)24109 if m is None:24110 continue24111 migrations.append(24112 Migration(24113 version=int(m.group(1)),24114 name=m.group(2),24115 sql=entry.read_text(),24116 )24117 )24118 migrations.sort(key=lambda mig: mig.version)24119 versions = [m.version for m in migrations]24120 if len(set(versions)) != len(versions):24121 msg = f"Duplicate migration versions: {versions}"24122> raise MigrationError(msg)24123E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2412424125nixbot/migrations.py:67: MigrationError24126______ ERROR at setup of test_reuse_for_default_branch_push_runs_effects _______24127[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142412824129self = <Coroutine test_reuse_for_default_branch_push_runs_effects>2413024131 def setup(self) -> None:24132 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24133 if runner_fixture_id not in self.fixturenames:24134 self.fixturenames.append(runner_fixture_id)24135 # When loop factories are configured, resolve the loop factory24136 # fixture early so that a factory variant change cascades cache24137 # invalidation before any async fixture checks its cache.24138 hook_caller = self.config.hook.pytest_asyncio_loop_factories24139 if hook_caller.get_hookimpls():24140 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24141> return super().setup()24142 ^^^^^^^^^^^^^^^2414324144/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24145_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24146nixbot/tests/conftest.py:33: in postgres_dsn24147 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24148 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24149/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24150 return next(self.gen)24151 ^^^^^^^^^^^^^^24152nixbot/tests/support.py:327: in ephemeral_postgres24153 run_sync(apply_migrations(dsn))24154nixbot/tests/support.py:285: in run_sync24155 return executor.submit(asyncio.run, coro).result(timeout=120)24156 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24157/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24158 return self.__get_result()24159 ^^^^^^^^^^^^^^^^^^^24160/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24161 raise self._exception24162/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24163 result = ctx.run(self.task)24164 ^^^^^^^^^^^^^^^^^^24165/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24166 return fn(*args, **kwargs)24167 ^^^^^^^^^^^^^^^^^^^24168/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24169 return runner.run(main)24170 ^^^^^^^^^^^^^^^^24171/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24172 return self._loop.run_until_complete(task)24173 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24174/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24175 return future.result()24176 ^^^^^^^^^^^^^^^24177nixbot/migrations.py:99: in apply_migrations24178 migrations = load_migrations()24179 ^^^^^^^^^^^^^^^^^24180_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2418124182 def load_migrations() -> list[Migration]:24183 """Load migration scripts shipped with the package, ordered by version."""24184 migrations = []24185 for entry in resources.files(__package__).joinpath("migrations").iterdir():24186 m = _SCRIPT_RE.match(entry.name)24187 if m is None:24188 continue24189 migrations.append(24190 Migration(24191 version=int(m.group(1)),24192 name=m.group(2),24193 sql=entry.read_text(),24194 )24195 )24196 migrations.sort(key=lambda mig: mig.version)24197 versions = [m.version for m in migrations]24198 if len(set(versions)) != len(versions):24199 msg = f"Duplicate migration versions: {versions}"24200> raise MigrationError(msg)24201E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2420224203nixbot/migrations.py:67: MigrationError24204__________________ ERROR at setup of test_effect_log_raw_text __________________24205[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142420624207request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24208tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2420924210 @pytest.fixture(scope="module")24211 def postgres_dsn(24212 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24213 ) -> Iterator[str]:24214 if shutil.which("initdb") is None:24215 pytest.skip("postgresql not available")24216 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24217> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24218 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2421924220nixbot/tests/conftest.py:33: 24221_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24222/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24223 return next(self.gen)24224 ^^^^^^^^^^^^^^24225nixbot/tests/support.py:327: in ephemeral_postgres24226 run_sync(apply_migrations(dsn))24227nixbot/tests/support.py:285: in run_sync24228 return executor.submit(asyncio.run, coro).result(timeout=120)24229 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24230/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24231 return self.__get_result()24232 ^^^^^^^^^^^^^^^^^^^24233/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24234 raise self._exception24235/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24236 result = ctx.run(self.task)24237 ^^^^^^^^^^^^^^^^^^24238/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24239 return fn(*args, **kwargs)24240 ^^^^^^^^^^^^^^^^^^^24241/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24242 return runner.run(main)24243 ^^^^^^^^^^^^^^^^24244/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24245 return self._loop.run_until_complete(task)24246 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24247/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24248 return future.result()24249 ^^^^^^^^^^^^^^^24250nixbot/migrations.py:99: in apply_migrations24251 migrations = load_migrations()24252 ^^^^^^^^^^^^^^^^^24253_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2425424255 def load_migrations() -> list[Migration]:24256 """Load migration scripts shipped with the package, ordered by version."""24257 migrations = []24258 for entry in resources.files(__package__).joinpath("migrations").iterdir():24259 m = _SCRIPT_RE.match(entry.name)24260 if m is None:24261 continue24262 migrations.append(24263 Migration(24264 version=int(m.group(1)),24265 name=m.group(2),24266 sql=entry.read_text(),24267 )24268 )24269 migrations.sort(key=lambda mig: mig.version)24270 versions = [m.version for m in migrations]24271 if len(set(versions)) != len(versions):24272 msg = f"Duplicate migration versions: {versions}"24273> raise MigrationError(msg)24274E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2427524276nixbot/migrations.py:67: MigrationError24277______ ERROR at setup of test_reuse_replays_effect_statuses_to_new_commit ______24278[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142427924280self = <Coroutine test_reuse_replays_effect_statuses_to_new_commit>2428124282 def setup(self) -> None:24283 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24284 if runner_fixture_id not in self.fixturenames:24285 self.fixturenames.append(runner_fixture_id)24286 # When loop factories are configured, resolve the loop factory24287 # fixture early so that a factory variant change cascades cache24288 # invalidation before any async fixture checks its cache.24289 hook_caller = self.config.hook.pytest_asyncio_loop_factories24290 if hook_caller.get_hookimpls():24291 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24292> return super().setup()24293 ^^^^^^^^^^^^^^^2429424295/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24296_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24297nixbot/tests/conftest.py:33: in postgres_dsn24298 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24299 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24300/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24301 return next(self.gen)24302 ^^^^^^^^^^^^^^24303nixbot/tests/support.py:327: in ephemeral_postgres24304 run_sync(apply_migrations(dsn))24305nixbot/tests/support.py:285: in run_sync24306 return executor.submit(asyncio.run, coro).result(timeout=120)24307 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24308/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24309 return self.__get_result()24310 ^^^^^^^^^^^^^^^^^^^24311/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24312 raise self._exception24313/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24314 result = ctx.run(self.task)24315 ^^^^^^^^^^^^^^^^^^24316/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24317 return fn(*args, **kwargs)24318 ^^^^^^^^^^^^^^^^^^^24319/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24320 return runner.run(main)24321 ^^^^^^^^^^^^^^^^24322/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24323 return self._loop.run_until_complete(task)24324 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24325/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24326 return future.result()24327 ^^^^^^^^^^^^^^^24328nixbot/migrations.py:99: in apply_migrations24329 migrations = load_migrations()24330 ^^^^^^^^^^^^^^^^^24331_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2433224333 def load_migrations() -> list[Migration]:24334 """Load migration scripts shipped with the package, ordered by version."""24335 migrations = []24336 for entry in resources.files(__package__).joinpath("migrations").iterdir():24337 m = _SCRIPT_RE.match(entry.name)24338 if m is None:24339 continue24340 migrations.append(24341 Migration(24342 version=int(m.group(1)),24343 name=m.group(2),24344 sql=entry.read_text(),24345 )24346 )24347 migrations.sort(key=lambda mig: mig.version)24348 versions = [m.version for m in migrations]24349 if len(set(versions)) != len(versions):24350 msg = f"Duplicate migration versions: {versions}"24351> raise MigrationError(msg)24352E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2435324354nixbot/migrations.py:67: MigrationError24355_____________ ERROR at setup of test_effect_log_viewer_status_icon _____________24356[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142435724358request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24359tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2436024361 @pytest.fixture(scope="module")24362 def postgres_dsn(24363 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24364 ) -> Iterator[str]:24365 if shutil.which("initdb") is None:24366 pytest.skip("postgresql not available")24367 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24368> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24369 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2437024371nixbot/tests/conftest.py:33: 24372_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24373/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24374 return next(self.gen)24375 ^^^^^^^^^^^^^^24376nixbot/tests/support.py:327: in ephemeral_postgres24377 run_sync(apply_migrations(dsn))24378nixbot/tests/support.py:285: in run_sync24379 return executor.submit(asyncio.run, coro).result(timeout=120)24380 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24381/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24382 return self.__get_result()24383 ^^^^^^^^^^^^^^^^^^^24384/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24385 raise self._exception24386/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24387 result = ctx.run(self.task)24388 ^^^^^^^^^^^^^^^^^^24389/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24390 return fn(*args, **kwargs)24391 ^^^^^^^^^^^^^^^^^^^24392/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24393 return runner.run(main)24394 ^^^^^^^^^^^^^^^^24395/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24396 return self._loop.run_until_complete(task)24397 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24398/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24399 return future.result()24400 ^^^^^^^^^^^^^^^24401nixbot/migrations.py:99: in apply_migrations24402 migrations = load_migrations()24403 ^^^^^^^^^^^^^^^^^24404_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2440524406 def load_migrations() -> list[Migration]:24407 """Load migration scripts shipped with the package, ordered by version."""24408 migrations = []24409 for entry in resources.files(__package__).joinpath("migrations").iterdir():24410 m = _SCRIPT_RE.match(entry.name)24411 if m is None:24412 continue24413 migrations.append(24414 Migration(24415 version=int(m.group(1)),24416 name=m.group(2),24417 sql=entry.read_text(),24418 )24419 )24420 migrations.sort(key=lambda mig: mig.version)24421 versions = [m.version for m in migrations]24422 if len(set(versions)) != len(versions):24423 msg = f"Duplicate migration versions: {versions}"24424> raise MigrationError(msg)24425E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2442624427nixbot/migrations.py:67: MigrationError24428____ ERROR at setup of test_attach_to_already_terminal_build_replays_status ____24429[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142443024431self = <Coroutine test_attach_to_already_terminal_build_replays_status>2443224433 def setup(self) -> None:24434 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24435 if runner_fixture_id not in self.fixturenames:24436 self.fixturenames.append(runner_fixture_id)24437 # When loop factories are configured, resolve the loop factory24438 # fixture early so that a factory variant change cascades cache24439 # invalidation before any async fixture checks its cache.24440 hook_caller = self.config.hook.pytest_asyncio_loop_factories24441 if hook_caller.get_hookimpls():24442 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24443> return super().setup()24444 ^^^^^^^^^^^^^^^2444524446/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24447_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24448nixbot/tests/conftest.py:33: in postgres_dsn24449 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24450 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24451/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24452 return next(self.gen)24453 ^^^^^^^^^^^^^^24454nixbot/tests/support.py:327: in ephemeral_postgres24455 run_sync(apply_migrations(dsn))24456nixbot/tests/support.py:285: in run_sync24457 return executor.submit(asyncio.run, coro).result(timeout=120)24458 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24459/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24460 return self.__get_result()24461 ^^^^^^^^^^^^^^^^^^^24462/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24463 raise self._exception24464/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24465 result = ctx.run(self.task)24466 ^^^^^^^^^^^^^^^^^^24467/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24468 return fn(*args, **kwargs)24469 ^^^^^^^^^^^^^^^^^^^24470/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24471 return runner.run(main)24472 ^^^^^^^^^^^^^^^^24473/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24474 return self._loop.run_until_complete(task)24475 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24476/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24477 return future.result()24478 ^^^^^^^^^^^^^^^24479nixbot/migrations.py:99: in apply_migrations24480 migrations = load_migrations()24481 ^^^^^^^^^^^^^^^^^24482_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2448324484 def load_migrations() -> list[Migration]:24485 """Load migration scripts shipped with the package, ordered by version."""24486 migrations = []24487 for entry in resources.files(__package__).joinpath("migrations").iterdir():24488 m = _SCRIPT_RE.match(entry.name)24489 if m is None:24490 continue24491 migrations.append(24492 Migration(24493 version=int(m.group(1)),24494 name=m.group(2),24495 sql=entry.read_text(),24496 )24497 )24498 migrations.sort(key=lambda mig: mig.version)24499 versions = [m.version for m in migrations]24500 if len(set(versions)) != len(versions):24501 msg = f"Duplicate migration versions: {versions}"24502> raise MigrationError(msg)24503E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2450424505nixbot/migrations.py:67: MigrationError24506__________ ERROR at setup of test_effect_changes_notify_build_events ___________24507[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142450824509request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24510tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2451124512 @pytest.fixture(scope="module")24513 def postgres_dsn(24514 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24515 ) -> Iterator[str]:24516 if shutil.which("initdb") is None:24517 pytest.skip("postgresql not available")24518 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24519> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24520 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2452124522nixbot/tests/conftest.py:33: 24523_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24524/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24525 return next(self.gen)24526 ^^^^^^^^^^^^^^24527nixbot/tests/support.py:327: in ephemeral_postgres24528 run_sync(apply_migrations(dsn))24529nixbot/tests/support.py:285: in run_sync24530 return executor.submit(asyncio.run, coro).result(timeout=120)24531 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24532/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24533 return self.__get_result()24534 ^^^^^^^^^^^^^^^^^^^24535/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24536 raise self._exception24537/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24538 result = ctx.run(self.task)24539 ^^^^^^^^^^^^^^^^^^24540/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24541 return fn(*args, **kwargs)24542 ^^^^^^^^^^^^^^^^^^^24543/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24544 return runner.run(main)24545 ^^^^^^^^^^^^^^^^24546/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24547 return self._loop.run_until_complete(task)24548 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24549/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24550 return future.result()24551 ^^^^^^^^^^^^^^^24552nixbot/migrations.py:99: in apply_migrations24553 migrations = load_migrations()24554 ^^^^^^^^^^^^^^^^^24555_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2455624557 def load_migrations() -> list[Migration]:24558 """Load migration scripts shipped with the package, ordered by version."""24559 migrations = []24560 for entry in resources.files(__package__).joinpath("migrations").iterdir():24561 m = _SCRIPT_RE.match(entry.name)24562 if m is None:24563 continue24564 migrations.append(24565 Migration(24566 version=int(m.group(1)),24567 name=m.group(2),24568 sql=entry.read_text(),24569 )24570 )24571 migrations.sort(key=lambda mig: mig.version)24572 versions = [m.version for m in migrations]24573 if len(set(versions)) != len(versions):24574 msg = f"Duplicate migration versions: {versions}"24575> raise MigrationError(msg)24576E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2457724578nixbot/migrations.py:67: MigrationError24579___________________ ERROR at setup of test_effects_state_api ___________________24580[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142458124582request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24583tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2458424585 @pytest.fixture(scope="module")24586 def postgres_dsn(24587 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24588 ) -> Iterator[str]:24589 if shutil.which("initdb") is None:24590 pytest.skip("postgresql not available")24591 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24592> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24593 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2459424595nixbot/tests/conftest.py:33: 24596_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24597/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24598 return next(self.gen)24599 ^^^^^^^^^^^^^^24600nixbot/tests/support.py:327: in ephemeral_postgres24601 run_sync(apply_migrations(dsn))24602nixbot/tests/support.py:285: in run_sync24603 return executor.submit(asyncio.run, coro).result(timeout=120)24604 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24605/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24606 return self.__get_result()24607 ^^^^^^^^^^^^^^^^^^^24608/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24609 raise self._exception24610/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24611 result = ctx.run(self.task)24612 ^^^^^^^^^^^^^^^^^^24613/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24614 return fn(*args, **kwargs)24615 ^^^^^^^^^^^^^^^^^^^24616/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24617 return runner.run(main)24618 ^^^^^^^^^^^^^^^^24619/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24620 return self._loop.run_until_complete(task)24621 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24622/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24623 return future.result()24624 ^^^^^^^^^^^^^^^24625nixbot/migrations.py:99: in apply_migrations24626 migrations = load_migrations()24627 ^^^^^^^^^^^^^^^^^24628_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2462924630 def load_migrations() -> list[Migration]:24631 """Load migration scripts shipped with the package, ordered by version."""24632 migrations = []24633 for entry in resources.files(__package__).joinpath("migrations").iterdir():24634 m = _SCRIPT_RE.match(entry.name)24635 if m is None:24636 continue24637 migrations.append(24638 Migration(24639 version=int(m.group(1)),24640 name=m.group(2),24641 sql=entry.read_text(),24642 )24643 )24644 migrations.sort(key=lambda mig: mig.version)24645 versions = [m.version for m in migrations]24646 if len(set(versions)) != len(versions):24647 msg = f"Duplicate migration versions: {versions}"24648> raise MigrationError(msg)24649E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2465024651nixbot/migrations.py:67: MigrationError24652___ ERROR at setup of test_cancel_during_eval_resolves_linked_eval_contexts ____24653[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142465424655self = <Coroutine test_cancel_during_eval_resolves_linked_eval_contexts>2465624657 def setup(self) -> None:24658 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24659 if runner_fixture_id not in self.fixturenames:24660 self.fixturenames.append(runner_fixture_id)24661 # When loop factories are configured, resolve the loop factory24662 # fixture early so that a factory variant change cascades cache24663 # invalidation before any async fixture checks its cache.24664 hook_caller = self.config.hook.pytest_asyncio_loop_factories24665 if hook_caller.get_hookimpls():24666 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24667> return super().setup()24668 ^^^^^^^^^^^^^^^2466924670/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24671_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24672nixbot/tests/conftest.py:33: in postgres_dsn24673 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24674 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24675/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24676 return next(self.gen)24677 ^^^^^^^^^^^^^^24678nixbot/tests/support.py:327: in ephemeral_postgres24679 run_sync(apply_migrations(dsn))24680nixbot/tests/support.py:285: in run_sync24681 return executor.submit(asyncio.run, coro).result(timeout=120)24682 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24683/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24684 return self.__get_result()24685 ^^^^^^^^^^^^^^^^^^^24686/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24687 raise self._exception24688/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24689 result = ctx.run(self.task)24690 ^^^^^^^^^^^^^^^^^^24691/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24692 return fn(*args, **kwargs)24693 ^^^^^^^^^^^^^^^^^^^24694/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24695 return runner.run(main)24696 ^^^^^^^^^^^^^^^^24697/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24698 return self._loop.run_until_complete(task)24699 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24700/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24701 return future.result()24702 ^^^^^^^^^^^^^^^24703nixbot/migrations.py:99: in apply_migrations24704 migrations = load_migrations()24705 ^^^^^^^^^^^^^^^^^24706_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2470724708 def load_migrations() -> list[Migration]:24709 """Load migration scripts shipped with the package, ordered by version."""24710 migrations = []24711 for entry in resources.files(__package__).joinpath("migrations").iterdir():24712 m = _SCRIPT_RE.match(entry.name)24713 if m is None:24714 continue24715 migrations.append(24716 Migration(24717 version=int(m.group(1)),24718 name=m.group(2),24719 sql=entry.read_text(),24720 )24721 )24722 migrations.sort(key=lambda mig: mig.version)24723 versions = [m.version for m in migrations]24724 if len(set(versions)) != len(versions):24725 msg = f"Duplicate migration versions: {versions}"24726> raise MigrationError(msg)24727E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2472824729nixbot/migrations.py:67: MigrationError24730____________________ ERROR at setup of test_pr_comment_api _____________________24731[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142473224733request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24734tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2473524736 @pytest.fixture(scope="module")24737 def postgres_dsn(24738 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24739 ) -> Iterator[str]:24740 if shutil.which("initdb") is None:24741 pytest.skip("postgresql not available")24742 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24743> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24744 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2474524746nixbot/tests/conftest.py:33: 24747_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24748/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24749 return next(self.gen)24750 ^^^^^^^^^^^^^^24751nixbot/tests/support.py:327: in ephemeral_postgres24752 run_sync(apply_migrations(dsn))24753nixbot/tests/support.py:285: in run_sync24754 return executor.submit(asyncio.run, coro).result(timeout=120)24755 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24756/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24757 return self.__get_result()24758 ^^^^^^^^^^^^^^^^^^^24759/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24760 raise self._exception24761/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24762 result = ctx.run(self.task)24763 ^^^^^^^^^^^^^^^^^^24764/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24765 return fn(*args, **kwargs)24766 ^^^^^^^^^^^^^^^^^^^24767/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24768 return runner.run(main)24769 ^^^^^^^^^^^^^^^^24770/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24771 return self._loop.run_until_complete(task)24772 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24773/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24774 return future.result()24775 ^^^^^^^^^^^^^^^24776nixbot/migrations.py:99: in apply_migrations24777 migrations = load_migrations()24778 ^^^^^^^^^^^^^^^^^24779_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2478024781 def load_migrations() -> list[Migration]:24782 """Load migration scripts shipped with the package, ordered by version."""24783 migrations = []24784 for entry in resources.files(__package__).joinpath("migrations").iterdir():24785 m = _SCRIPT_RE.match(entry.name)24786 if m is None:24787 continue24788 migrations.append(24789 Migration(24790 version=int(m.group(1)),24791 name=m.group(2),24792 sql=entry.read_text(),24793 )24794 )24795 migrations.sort(key=lambda mig: mig.version)24796 versions = [m.version for m in migrations]24797 if len(set(versions)) != len(versions):24798 msg = f"Duplicate migration versions: {versions}"24799> raise MigrationError(msg)24800E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2480124802nixbot/migrations.py:67: MigrationError24803____ ERROR at setup of test_effect_log_does_not_collide_with_attribute_log _____24804[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142480524806self = <Coroutine test_effect_log_does_not_collide_with_attribute_log>2480724808 def setup(self) -> None:24809 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24810 if runner_fixture_id not in self.fixturenames:24811 self.fixturenames.append(runner_fixture_id)24812 # When loop factories are configured, resolve the loop factory24813 # fixture early so that a factory variant change cascades cache24814 # invalidation before any async fixture checks its cache.24815 hook_caller = self.config.hook.pytest_asyncio_loop_factories24816 if hook_caller.get_hookimpls():24817 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24818> return super().setup()24819 ^^^^^^^^^^^^^^^2482024821/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24822_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24823nixbot/tests/conftest.py:33: in postgres_dsn24824 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24825 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24826/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24827 return next(self.gen)24828 ^^^^^^^^^^^^^^24829nixbot/tests/support.py:327: in ephemeral_postgres24830 run_sync(apply_migrations(dsn))24831nixbot/tests/support.py:285: in run_sync24832 return executor.submit(asyncio.run, coro).result(timeout=120)24833 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24834/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24835 return self.__get_result()24836 ^^^^^^^^^^^^^^^^^^^24837/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24838 raise self._exception24839/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24840 result = ctx.run(self.task)24841 ^^^^^^^^^^^^^^^^^^24842/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24843 return fn(*args, **kwargs)24844 ^^^^^^^^^^^^^^^^^^^24845/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24846 return runner.run(main)24847 ^^^^^^^^^^^^^^^^24848/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24849 return self._loop.run_until_complete(task)24850 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24851/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24852 return future.result()24853 ^^^^^^^^^^^^^^^24854nixbot/migrations.py:99: in apply_migrations24855 migrations = load_migrations()24856 ^^^^^^^^^^^^^^^^^24857_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2485824859 def load_migrations() -> list[Migration]:24860 """Load migration scripts shipped with the package, ordered by version."""24861 migrations = []24862 for entry in resources.files(__package__).joinpath("migrations").iterdir():24863 m = _SCRIPT_RE.match(entry.name)24864 if m is None:24865 continue24866 migrations.append(24867 Migration(24868 version=int(m.group(1)),24869 name=m.group(2),24870 sql=entry.read_text(),24871 )24872 )24873 migrations.sort(key=lambda mig: mig.version)24874 versions = [m.version for m in migrations]24875 if len(set(versions)) != len(versions):24876 msg = f"Duplicate migration versions: {versions}"24877> raise MigrationError(msg)24878E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2487924880nixbot/migrations.py:67: MigrationError24881_________________ ERROR at setup of test_workload_identity_api _________________24882[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142488324884request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24885tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2488624887 @pytest.fixture(scope="module")24888 def postgres_dsn(24889 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24890 ) -> Iterator[str]:24891 if shutil.which("initdb") is None:24892 pytest.skip("postgresql not available")24893 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24894> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24895 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2489624897nixbot/tests/conftest.py:33: 24898_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24899/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24900 return next(self.gen)24901 ^^^^^^^^^^^^^^24902nixbot/tests/support.py:327: in ephemeral_postgres24903 run_sync(apply_migrations(dsn))24904nixbot/tests/support.py:285: in run_sync24905 return executor.submit(asyncio.run, coro).result(timeout=120)24906 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24907/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24908 return self.__get_result()24909 ^^^^^^^^^^^^^^^^^^^24910/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24911 raise self._exception24912/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24913 result = ctx.run(self.task)24914 ^^^^^^^^^^^^^^^^^^24915/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24916 return fn(*args, **kwargs)24917 ^^^^^^^^^^^^^^^^^^^24918/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24919 return runner.run(main)24920 ^^^^^^^^^^^^^^^^24921/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24922 return self._loop.run_until_complete(task)24923 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24924/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24925 return future.result()24926 ^^^^^^^^^^^^^^^24927nixbot/migrations.py:99: in apply_migrations24928 migrations = load_migrations()24929 ^^^^^^^^^^^^^^^^^24930_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2493124932 def load_migrations() -> list[Migration]:24933 """Load migration scripts shipped with the package, ordered by version."""24934 migrations = []24935 for entry in resources.files(__package__).joinpath("migrations").iterdir():24936 m = _SCRIPT_RE.match(entry.name)24937 if m is None:24938 continue24939 migrations.append(24940 Migration(24941 version=int(m.group(1)),24942 name=m.group(2),24943 sql=entry.read_text(),24944 )24945 )24946 migrations.sort(key=lambda mig: mig.version)24947 versions = [m.version for m in migrations]24948 if len(set(versions)) != len(versions):24949 msg = f"Duplicate migration versions: {versions}"24950> raise MigrationError(msg)24951E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2495224953nixbot/migrations.py:67: MigrationError24954__________ ERROR at setup of test_post_process_paths_are_forge_scoped __________24955[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142495624957self = <Coroutine test_post_process_paths_are_forge_scoped>2495824959 def setup(self) -> None:24960 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24961 if runner_fixture_id not in self.fixturenames:24962 self.fixturenames.append(runner_fixture_id)24963 # When loop factories are configured, resolve the loop factory24964 # fixture early so that a factory variant change cascades cache24965 # invalidation before any async fixture checks its cache.24966 hook_caller = self.config.hook.pytest_asyncio_loop_factories24967 if hook_caller.get_hookimpls():24968 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24969> return super().setup()24970 ^^^^^^^^^^^^^^^2497124972/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24973_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24974nixbot/tests/conftest.py:33: in postgres_dsn24975 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24976 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24977/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24978 return next(self.gen)24979 ^^^^^^^^^^^^^^24980nixbot/tests/support.py:327: in ephemeral_postgres24981 run_sync(apply_migrations(dsn))24982nixbot/tests/support.py:285: in run_sync24983 return executor.submit(asyncio.run, coro).result(timeout=120)24984 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24985/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24986 return self.__get_result()24987 ^^^^^^^^^^^^^^^^^^^24988/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24989 raise self._exception24990/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24991 result = ctx.run(self.task)24992 ^^^^^^^^^^^^^^^^^^24993/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24994 return fn(*args, **kwargs)24995 ^^^^^^^^^^^^^^^^^^^24996/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24997 return runner.run(main)24998 ^^^^^^^^^^^^^^^^24999/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25000 return self._loop.run_until_complete(task)25001 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25002/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25003 return future.result()25004 ^^^^^^^^^^^^^^^25005nixbot/migrations.py:99: in apply_migrations25006 migrations = load_migrations()25007 ^^^^^^^^^^^^^^^^^25008_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2500925010 def load_migrations() -> list[Migration]:25011 """Load migration scripts shipped with the package, ordered by version."""25012 migrations = []25013 for entry in resources.files(__package__).joinpath("migrations").iterdir():25014 m = _SCRIPT_RE.match(entry.name)25015 if m is None:25016 continue25017 migrations.append(25018 Migration(25019 version=int(m.group(1)),25020 name=m.group(2),25021 sql=entry.read_text(),25022 )25023 )25024 migrations.sort(key=lambda mig: mig.version)25025 versions = [m.version for m in migrations]25026 if len(set(versions)) != len(versions):25027 msg = f"Duplicate migration versions: {versions}"25028> raise MigrationError(msg)25029E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2503025031nixbot/migrations.py:67: MigrationError25032_____________ ERROR at setup of test_logout_revokes_session_cookie _____________25033[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142503425035request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25036tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2503725038 @pytest.fixture(scope="module")25039 def postgres_dsn(25040 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25041 ) -> Iterator[str]:25042 if shutil.which("initdb") is None:25043 pytest.skip("postgresql not available")25044 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25045> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25046 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2504725048nixbot/tests/conftest.py:33: 25049_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25050/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25051 return next(self.gen)25052 ^^^^^^^^^^^^^^25053nixbot/tests/support.py:327: in ephemeral_postgres25054 run_sync(apply_migrations(dsn))25055nixbot/tests/support.py:285: in run_sync25056 return executor.submit(asyncio.run, coro).result(timeout=120)25057 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25058/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25059 return self.__get_result()25060 ^^^^^^^^^^^^^^^^^^^25061/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25062 raise self._exception25063/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25064 result = ctx.run(self.task)25065 ^^^^^^^^^^^^^^^^^^25066/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25067 return fn(*args, **kwargs)25068 ^^^^^^^^^^^^^^^^^^^25069/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25070 return runner.run(main)25071 ^^^^^^^^^^^^^^^^25072/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25073 return self._loop.run_until_complete(task)25074 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25075/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25076 return future.result()25077 ^^^^^^^^^^^^^^^25078nixbot/migrations.py:99: in apply_migrations25079 migrations = load_migrations()25080 ^^^^^^^^^^^^^^^^^25081_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2508225083 def load_migrations() -> list[Migration]:25084 """Load migration scripts shipped with the package, ordered by version."""25085 migrations = []25086 for entry in resources.files(__package__).joinpath("migrations").iterdir():25087 m = _SCRIPT_RE.match(entry.name)25088 if m is None:25089 continue25090 migrations.append(25091 Migration(25092 version=int(m.group(1)),25093 name=m.group(2),25094 sql=entry.read_text(),25095 )25096 )25097 migrations.sort(key=lambda mig: mig.version)25098 versions = [m.version for m in migrations]25099 if len(set(versions)) != len(versions):25100 msg = f"Duplicate migration versions: {versions}"25101> raise MigrationError(msg)25102E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2510325104nixbot/migrations.py:67: MigrationError25105_______ ERROR at setup of test_effects_phase_error_keeps_succeeded_build _______25106[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142510725108self = <Coroutine test_effects_phase_error_keeps_succeeded_build>2510925110 def setup(self) -> None:25111 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"25112 if runner_fixture_id not in self.fixturenames:25113 self.fixturenames.append(runner_fixture_id)25114 # When loop factories are configured, resolve the loop factory25115 # fixture early so that a factory variant change cascades cache25116 # invalidation before any async fixture checks its cache.25117 hook_caller = self.config.hook.pytest_asyncio_loop_factories25118 if hook_caller.get_hookimpls():25119 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)25120> return super().setup()25121 ^^^^^^^^^^^^^^^2512225123/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 25124_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25125nixbot/tests/conftest.py:33: in postgres_dsn25126 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25127 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25128/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25129 return next(self.gen)25130 ^^^^^^^^^^^^^^25131nixbot/tests/support.py:327: in ephemeral_postgres25132 run_sync(apply_migrations(dsn))25133nixbot/tests/support.py:285: in run_sync25134 return executor.submit(asyncio.run, coro).result(timeout=120)25135 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25136/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25137 return self.__get_result()25138 ^^^^^^^^^^^^^^^^^^^25139/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25140 raise self._exception25141/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25142 result = ctx.run(self.task)25143 ^^^^^^^^^^^^^^^^^^25144/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25145 return fn(*args, **kwargs)25146 ^^^^^^^^^^^^^^^^^^^25147/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25148 return runner.run(main)25149 ^^^^^^^^^^^^^^^^25150/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25151 return self._loop.run_until_complete(task)25152 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25153/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25154 return future.result()25155 ^^^^^^^^^^^^^^^25156nixbot/migrations.py:99: in apply_migrations25157 migrations = load_migrations()25158 ^^^^^^^^^^^^^^^^^25159_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2516025161 def load_migrations() -> list[Migration]:25162 """Load migration scripts shipped with the package, ordered by version."""25163 migrations = []25164 for entry in resources.files(__package__).joinpath("migrations").iterdir():25165 m = _SCRIPT_RE.match(entry.name)25166 if m is None:25167 continue25168 migrations.append(25169 Migration(25170 version=int(m.group(1)),25171 name=m.group(2),25172 sql=entry.read_text(),25173 )25174 )25175 migrations.sort(key=lambda mig: mig.version)25176 versions = [m.version for m in migrations]25177 if len(set(versions)) != len(versions):25178 msg = f"Duplicate migration versions: {versions}"25179> raise MigrationError(msg)25180E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2518125182nixbot/migrations.py:67: MigrationError25183______________ ERROR at setup of test_gitlab_nested_group_routes _______________25184[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142518525186request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25187tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2518825189 @pytest.fixture(scope="module")25190 def postgres_dsn(25191 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25192 ) -> Iterator[str]:25193 if shutil.which("initdb") is None:25194 pytest.skip("postgresql not available")25195 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25196> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25197 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2519825199nixbot/tests/conftest.py:33: 25200_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25201/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25202 return next(self.gen)25203 ^^^^^^^^^^^^^^25204nixbot/tests/support.py:327: in ephemeral_postgres25205 run_sync(apply_migrations(dsn))25206nixbot/tests/support.py:285: in run_sync25207 return executor.submit(asyncio.run, coro).result(timeout=120)25208 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25209/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25210 return self.__get_result()25211 ^^^^^^^^^^^^^^^^^^^25212/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25213 raise self._exception25214/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25215 result = ctx.run(self.task)25216 ^^^^^^^^^^^^^^^^^^25217/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25218 return fn(*args, **kwargs)25219 ^^^^^^^^^^^^^^^^^^^25220/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25221 return runner.run(main)25222 ^^^^^^^^^^^^^^^^25223/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25224 return self._loop.run_until_complete(task)25225 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25226/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25227 return future.result()25228 ^^^^^^^^^^^^^^^25229nixbot/migrations.py:99: in apply_migrations25230 migrations = load_migrations()25231 ^^^^^^^^^^^^^^^^^25232_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2523325234 def load_migrations() -> list[Migration]:25235 """Load migration scripts shipped with the package, ordered by version."""25236 migrations = []25237 for entry in resources.files(__package__).joinpath("migrations").iterdir():25238 m = _SCRIPT_RE.match(entry.name)25239 if m is None:25240 continue25241 migrations.append(25242 Migration(25243 version=int(m.group(1)),25244 name=m.group(2),25245 sql=entry.read_text(),25246 )25247 )25248 migrations.sort(key=lambda mig: mig.version)25249 versions = [m.version for m in migrations]25250 if len(set(versions)) != len(versions):25251 msg = f"Duplicate migration versions: {versions}"25252> raise MigrationError(msg)25253E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2525425255nixbot/migrations.py:67: MigrationError25256_____ ERROR at setup of test_reuse_post_process_error_still_reports_status _____25257[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142525825259self = <Coroutine test_reuse_post_process_error_still_reports_status>2526025261 def setup(self) -> None:25262 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"25263 if runner_fixture_id not in self.fixturenames:25264 self.fixturenames.append(runner_fixture_id)25265 # When loop factories are configured, resolve the loop factory25266 # fixture early so that a factory variant change cascades cache25267 # invalidation before any async fixture checks its cache.25268 hook_caller = self.config.hook.pytest_asyncio_loop_factories25269 if hook_caller.get_hookimpls():25270 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)25271> return super().setup()25272 ^^^^^^^^^^^^^^^2527325274/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 25275_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25276nixbot/tests/conftest.py:33: in postgres_dsn25277 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25278 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25279/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25280 return next(self.gen)25281 ^^^^^^^^^^^^^^25282nixbot/tests/support.py:327: in ephemeral_postgres25283 run_sync(apply_migrations(dsn))25284nixbot/tests/support.py:285: in run_sync25285 return executor.submit(asyncio.run, coro).result(timeout=120)25286 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25287/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25288 return self.__get_result()25289 ^^^^^^^^^^^^^^^^^^^25290/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25291 raise self._exception25292/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25293 result = ctx.run(self.task)25294 ^^^^^^^^^^^^^^^^^^25295/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25296 return fn(*args, **kwargs)25297 ^^^^^^^^^^^^^^^^^^^25298/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25299 return runner.run(main)25300 ^^^^^^^^^^^^^^^^25301/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25302 return self._loop.run_until_complete(task)25303 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25304/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25305 return future.result()25306 ^^^^^^^^^^^^^^^25307nixbot/migrations.py:99: in apply_migrations25308 migrations = load_migrations()25309 ^^^^^^^^^^^^^^^^^25310_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2531125312 def load_migrations() -> list[Migration]:25313 """Load migration scripts shipped with the package, ordered by version."""25314 migrations = []25315 for entry in resources.files(__package__).joinpath("migrations").iterdir():25316 m = _SCRIPT_RE.match(entry.name)25317 if m is None:25318 continue25319 migrations.append(25320 Migration(25321 version=int(m.group(1)),25322 name=m.group(2),25323 sql=entry.read_text(),25324 )25325 )25326 migrations.sort(key=lambda mig: mig.version)25327 versions = [m.version for m in migrations]25328 if len(set(versions)) != len(versions):25329 msg = f"Duplicate migration versions: {versions}"25330> raise MigrationError(msg)25331E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2533225333nixbot/migrations.py:67: MigrationError25334___________ ERROR at setup of test_scheduled_run_viewer_renders_ansi ___________25335[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142533625337request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25338tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2533925340 @pytest.fixture(scope="module")25341 def postgres_dsn(25342 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25343 ) -> Iterator[str]:25344 if shutil.which("initdb") is None:25345 pytest.skip("postgresql not available")25346 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25347> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25348 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2534925350nixbot/tests/conftest.py:33: 25351_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25352/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25353 return next(self.gen)25354 ^^^^^^^^^^^^^^25355nixbot/tests/support.py:327: in ephemeral_postgres25356 run_sync(apply_migrations(dsn))25357nixbot/tests/support.py:285: in run_sync25358 return executor.submit(asyncio.run, coro).result(timeout=120)25359 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25360/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25361 return self.__get_result()25362 ^^^^^^^^^^^^^^^^^^^25363/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25364 raise self._exception25365/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25366 result = ctx.run(self.task)25367 ^^^^^^^^^^^^^^^^^^25368/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25369 return fn(*args, **kwargs)25370 ^^^^^^^^^^^^^^^^^^^25371/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25372 return runner.run(main)25373 ^^^^^^^^^^^^^^^^25374/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25375 return self._loop.run_until_complete(task)25376 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25377/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25378 return future.result()25379 ^^^^^^^^^^^^^^^25380nixbot/migrations.py:99: in apply_migrations25381 migrations = load_migrations()25382 ^^^^^^^^^^^^^^^^^25383_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2538425385 def load_migrations() -> list[Migration]:25386 """Load migration scripts shipped with the package, ordered by version."""25387 migrations = []25388 for entry in resources.files(__package__).joinpath("migrations").iterdir():25389 m = _SCRIPT_RE.match(entry.name)25390 if m is None:25391 continue25392 migrations.append(25393 Migration(25394 version=int(m.group(1)),25395 name=m.group(2),25396 sql=entry.read_text(),25397 )25398 )25399 migrations.sort(key=lambda mig: mig.version)25400 versions = [m.version for m in migrations]25401 if len(set(versions)) != len(versions):25402 msg = f"Duplicate migration versions: {versions}"25403> raise MigrationError(msg)25404E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2540525406nixbot/migrations.py:67: MigrationError25407________ ERROR at setup of test_scheduled_run_viewer_cross_project_404 _________25408[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142540925410request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25411tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2541225413 @pytest.fixture(scope="module")25414 def postgres_dsn(25415 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25416 ) -> Iterator[str]:25417 if shutil.which("initdb") is None:25418 pytest.skip("postgresql not available")25419 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25420> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25421 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2542225423nixbot/tests/conftest.py:33: 25424_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25425/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25426 return next(self.gen)25427 ^^^^^^^^^^^^^^25428nixbot/tests/support.py:327: in ephemeral_postgres25429 run_sync(apply_migrations(dsn))25430nixbot/tests/support.py:285: in run_sync25431 return executor.submit(asyncio.run, coro).result(timeout=120)25432 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25433/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25434 return self.__get_result()25435 ^^^^^^^^^^^^^^^^^^^25436/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25437 raise self._exception25438/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25439 result = ctx.run(self.task)25440 ^^^^^^^^^^^^^^^^^^25441/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25442 return fn(*args, **kwargs)25443 ^^^^^^^^^^^^^^^^^^^25444/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25445 return runner.run(main)25446 ^^^^^^^^^^^^^^^^25447/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25448 return self._loop.run_until_complete(task)25449 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25450/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25451 return future.result()25452 ^^^^^^^^^^^^^^^25453nixbot/migrations.py:99: in apply_migrations25454 migrations = load_migrations()25455 ^^^^^^^^^^^^^^^^^25456_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2545725458 def load_migrations() -> list[Migration]:25459 """Load migration scripts shipped with the package, ordered by version."""25460 migrations = []25461 for entry in resources.files(__package__).joinpath("migrations").iterdir():25462 m = _SCRIPT_RE.match(entry.name)25463 if m is None:25464 continue25465 migrations.append(25466 Migration(25467 version=int(m.group(1)),25468 name=m.group(2),25469 sql=entry.read_text(),25470 )25471 )25472 migrations.sort(key=lambda mig: mig.version)25473 versions = [m.version for m in migrations]25474 if len(set(versions)) != len(versions):25475 msg = f"Duplicate migration versions: {versions}"25476> raise MigrationError(msg)25477E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2547825479nixbot/migrations.py:67: MigrationError25480____ ERROR at setup of test_reuse_with_missing_output_still_post_processes _____25481[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142548225483self = <Coroutine test_reuse_with_missing_output_still_post_processes>2548425485 def setup(self) -> None:25486 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"25487 if runner_fixture_id not in self.fixturenames:25488 self.fixturenames.append(runner_fixture_id)25489 # When loop factories are configured, resolve the loop factory25490 # fixture early so that a factory variant change cascades cache25491 # invalidation before any async fixture checks its cache.25492 hook_caller = self.config.hook.pytest_asyncio_loop_factories25493 if hook_caller.get_hookimpls():25494 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)25495> return super().setup()25496 ^^^^^^^^^^^^^^^2549725498/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 25499_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25500nixbot/tests/conftest.py:33: in postgres_dsn25501 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25502 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25503/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25504 return next(self.gen)25505 ^^^^^^^^^^^^^^25506nixbot/tests/support.py:327: in ephemeral_postgres25507 run_sync(apply_migrations(dsn))25508nixbot/tests/support.py:285: in run_sync25509 return executor.submit(asyncio.run, coro).result(timeout=120)25510 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25511/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25512 return self.__get_result()25513 ^^^^^^^^^^^^^^^^^^^25514/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25515 raise self._exception25516/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25517 result = ctx.run(self.task)25518 ^^^^^^^^^^^^^^^^^^25519/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25520 return fn(*args, **kwargs)25521 ^^^^^^^^^^^^^^^^^^^25522/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25523 return runner.run(main)25524 ^^^^^^^^^^^^^^^^25525/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25526 return self._loop.run_until_complete(task)25527 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25528/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25529 return future.result()25530 ^^^^^^^^^^^^^^^25531nixbot/migrations.py:99: in apply_migrations25532 migrations = load_migrations()25533 ^^^^^^^^^^^^^^^^^25534_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2553525536 def load_migrations() -> list[Migration]:25537 """Load migration scripts shipped with the package, ordered by version."""25538 migrations = []25539 for entry in resources.files(__package__).joinpath("migrations").iterdir():25540 m = _SCRIPT_RE.match(entry.name)25541 if m is None:25542 continue25543 migrations.append(25544 Migration(25545 version=int(m.group(1)),25546 name=m.group(2),25547 sql=entry.read_text(),25548 )25549 )25550 migrations.sort(key=lambda mig: mig.version)25551 versions = [m.version for m in migrations]25552 if len(set(versions)) != len(versions):25553 msg = f"Duplicate migration versions: {versions}"25554> raise MigrationError(msg)25555E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2555625557nixbot/migrations.py:67: MigrationError25558_______ ERROR at setup of test_scheduled_run_log_unavailable_placeholder _______25559[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142556025561request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25562tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2556325564 @pytest.fixture(scope="module")25565 def postgres_dsn(25566 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25567 ) -> Iterator[str]:25568 if shutil.which("initdb") is None:25569 pytest.skip("postgresql not available")25570 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25571> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25572 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2557325574nixbot/tests/conftest.py:33: 25575_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25576/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25577 return next(self.gen)25578 ^^^^^^^^^^^^^^25579nixbot/tests/support.py:327: in ephemeral_postgres25580 run_sync(apply_migrations(dsn))25581nixbot/tests/support.py:285: in run_sync25582 return executor.submit(asyncio.run, coro).result(timeout=120)25583 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25584/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25585 return self.__get_result()25586 ^^^^^^^^^^^^^^^^^^^25587/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25588 raise self._exception25589/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25590 result = ctx.run(self.task)25591 ^^^^^^^^^^^^^^^^^^25592/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25593 return fn(*args, **kwargs)25594 ^^^^^^^^^^^^^^^^^^^25595/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25596 return runner.run(main)25597 ^^^^^^^^^^^^^^^^25598/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25599 return self._loop.run_until_complete(task)25600 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25601/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25602 return future.result()25603 ^^^^^^^^^^^^^^^25604nixbot/migrations.py:99: in apply_migrations25605 migrations = load_migrations()25606 ^^^^^^^^^^^^^^^^^25607_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2560825609 def load_migrations() -> list[Migration]:25610 """Load migration scripts shipped with the package, ordered by version."""25611 migrations = []25612 for entry in resources.files(__package__).joinpath("migrations").iterdir():25613 m = _SCRIPT_RE.match(entry.name)25614 if m is None:25615 continue25616 migrations.append(25617 Migration(25618 version=int(m.group(1)),25619 name=m.group(2),25620 sql=entry.read_text(),25621 )25622 )25623 migrations.sort(key=lambda mig: mig.version)25624 versions = [m.version for m in migrations]25625 if len(set(versions)) != len(versions):25626 msg = f"Duplicate migration versions: {versions}"25627> raise MigrationError(msg)25628E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2562925630nixbot/migrations.py:67: MigrationError25631________ ERROR at setup of test_scheduled_run_viewer_waiting_before_log ________25632[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142563325634request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25635tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2563625637 @pytest.fixture(scope="module")25638 def postgres_dsn(25639 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25640 ) -> Iterator[str]:25641 if shutil.which("initdb") is None:25642 pytest.skip("postgresql not available")25643 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25644> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25645 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2564625647nixbot/tests/conftest.py:33: 25648_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25649/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25650 return next(self.gen)25651 ^^^^^^^^^^^^^^25652nixbot/tests/support.py:327: in ephemeral_postgres25653 run_sync(apply_migrations(dsn))25654nixbot/tests/support.py:285: in run_sync25655 return executor.submit(asyncio.run, coro).result(timeout=120)25656 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25657/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25658 return self.__get_result()25659 ^^^^^^^^^^^^^^^^^^^25660/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25661 raise self._exception25662/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25663 result = ctx.run(self.task)25664 ^^^^^^^^^^^^^^^^^^25665/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25666 return fn(*args, **kwargs)25667 ^^^^^^^^^^^^^^^^^^^25668/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25669 return runner.run(main)25670 ^^^^^^^^^^^^^^^^25671/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25672 return self._loop.run_until_complete(task)25673 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25674/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25675 return future.result()25676 ^^^^^^^^^^^^^^^25677nixbot/migrations.py:99: in apply_migrations25678 migrations = load_migrations()25679 ^^^^^^^^^^^^^^^^^25680_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2568125682 def load_migrations() -> list[Migration]:25683 """Load migration scripts shipped with the package, ordered by version."""25684 migrations = []25685 for entry in resources.files(__package__).joinpath("migrations").iterdir():25686 m = _SCRIPT_RE.match(entry.name)25687 if m is None:25688 continue25689 migrations.append(25690 Migration(25691 version=int(m.group(1)),25692 name=m.group(2),25693 sql=entry.read_text(),25694 )25695 )25696 migrations.sort(key=lambda mig: mig.version)25697 versions = [m.version for m in migrations]25698 if len(set(versions)) != len(versions):25699 msg = f"Duplicate migration versions: {versions}"25700> raise MigrationError(msg)25701E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2570225703nixbot/migrations.py:67: MigrationError25704___________ ERROR at setup of test_scheduled_run_history_lists_runs ____________25705[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142570625707request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25708tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2570925710 @pytest.fixture(scope="module")25711 def postgres_dsn(25712 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25713 ) -> Iterator[str]:25714 if shutil.which("initdb") is None:25715 pytest.skip("postgresql not available")25716 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25717> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25718 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2571925720nixbot/tests/conftest.py:33: 25721_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25722/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25723 return next(self.gen)25724 ^^^^^^^^^^^^^^25725nixbot/tests/support.py:327: in ephemeral_postgres25726 run_sync(apply_migrations(dsn))25727nixbot/tests/support.py:285: in run_sync25728 return executor.submit(asyncio.run, coro).result(timeout=120)25729 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25730/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25731 return self.__get_result()25732 ^^^^^^^^^^^^^^^^^^^25733/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25734 raise self._exception25735/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25736 result = ctx.run(self.task)25737 ^^^^^^^^^^^^^^^^^^25738/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25739 return fn(*args, **kwargs)25740 ^^^^^^^^^^^^^^^^^^^25741/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25742 return runner.run(main)25743 ^^^^^^^^^^^^^^^^25744/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25745 return self._loop.run_until_complete(task)25746 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25747/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25748 return future.result()25749 ^^^^^^^^^^^^^^^25750nixbot/migrations.py:99: in apply_migrations25751 migrations = load_migrations()25752 ^^^^^^^^^^^^^^^^^25753_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2575425755 def load_migrations() -> list[Migration]:25756 """Load migration scripts shipped with the package, ordered by version."""25757 migrations = []25758 for entry in resources.files(__package__).joinpath("migrations").iterdir():25759 m = _SCRIPT_RE.match(entry.name)25760 if m is None:25761 continue25762 migrations.append(25763 Migration(25764 version=int(m.group(1)),25765 name=m.group(2),25766 sql=entry.read_text(),25767 )25768 )25769 migrations.sort(key=lambda mig: mig.version)25770 versions = [m.version for m in migrations]25771 if len(set(versions)) != len(versions):25772 msg = f"Duplicate migration versions: {versions}"25773> raise MigrationError(msg)25774E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2577525776nixbot/migrations.py:67: MigrationError25777__________ ERROR at setup of test_scheduled_run_history_special_chars __________25778[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142577925780request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25781tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2578225783 @pytest.fixture(scope="module")25784 def postgres_dsn(25785 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25786 ) -> Iterator[str]:25787 if shutil.which("initdb") is None:25788 pytest.skip("postgresql not available")25789 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25790> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25791 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2579225793nixbot/tests/conftest.py:33: 25794_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25795/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25796 return next(self.gen)25797 ^^^^^^^^^^^^^^25798nixbot/tests/support.py:327: in ephemeral_postgres25799 run_sync(apply_migrations(dsn))25800nixbot/tests/support.py:285: in run_sync25801 return executor.submit(asyncio.run, coro).result(timeout=120)25802 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25803/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25804 return self.__get_result()25805 ^^^^^^^^^^^^^^^^^^^25806/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25807 raise self._exception25808/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25809 result = ctx.run(self.task)25810 ^^^^^^^^^^^^^^^^^^25811/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25812 return fn(*args, **kwargs)25813 ^^^^^^^^^^^^^^^^^^^25814/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25815 return runner.run(main)25816 ^^^^^^^^^^^^^^^^25817/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25818 return self._loop.run_until_complete(task)25819 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25820/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25821 return future.result()25822 ^^^^^^^^^^^^^^^25823nixbot/migrations.py:99: in apply_migrations25824 migrations = load_migrations()25825 ^^^^^^^^^^^^^^^^^25826_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2582725828 def load_migrations() -> list[Migration]:25829 """Load migration scripts shipped with the package, ordered by version."""25830 migrations = []25831 for entry in resources.files(__package__).joinpath("migrations").iterdir():25832 m = _SCRIPT_RE.match(entry.name)25833 if m is None:25834 continue25835 migrations.append(25836 Migration(25837 version=int(m.group(1)),25838 name=m.group(2),25839 sql=entry.read_text(),25840 )25841 )25842 migrations.sort(key=lambda mig: mig.version)25843 versions = [m.version for m in migrations]25844 if len(set(versions)) != len(versions):25845 msg = f"Duplicate migration versions: {versions}"25846> raise MigrationError(msg)25847E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2584825849nixbot/migrations.py:67: MigrationError25850_________ ERROR at setup of test_scheduled_run_stream_replays_history __________25851[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142585225853request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25854tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2585525856 @pytest.fixture(scope="module")25857 def postgres_dsn(25858 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25859 ) -> Iterator[str]:25860 if shutil.which("initdb") is None:25861 pytest.skip("postgresql not available")25862 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25863> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25864 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2586525866nixbot/tests/conftest.py:33: 25867_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25868/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25869 return next(self.gen)25870 ^^^^^^^^^^^^^^25871nixbot/tests/support.py:327: in ephemeral_postgres25872 run_sync(apply_migrations(dsn))25873nixbot/tests/support.py:285: in run_sync25874 return executor.submit(asyncio.run, coro).result(timeout=120)25875 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25876/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25877 return self.__get_result()25878 ^^^^^^^^^^^^^^^^^^^25879/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25880 raise self._exception25881/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25882 result = ctx.run(self.task)25883 ^^^^^^^^^^^^^^^^^^25884/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25885 return fn(*args, **kwargs)25886 ^^^^^^^^^^^^^^^^^^^25887/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25888 return runner.run(main)25889 ^^^^^^^^^^^^^^^^25890/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25891 return self._loop.run_until_complete(task)25892 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25893/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25894 return future.result()25895 ^^^^^^^^^^^^^^^25896nixbot/migrations.py:99: in apply_migrations25897 migrations = load_migrations()25898 ^^^^^^^^^^^^^^^^^25899_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2590025901 def load_migrations() -> list[Migration]:25902 """Load migration scripts shipped with the package, ordered by version."""25903 migrations = []25904 for entry in resources.files(__package__).joinpath("migrations").iterdir():25905 m = _SCRIPT_RE.match(entry.name)25906 if m is None:25907 continue25908 migrations.append(25909 Migration(25910 version=int(m.group(1)),25911 name=m.group(2),25912 sql=entry.read_text(),25913 )25914 )25915 migrations.sort(key=lambda mig: mig.version)25916 versions = [m.version for m in migrations]25917 if len(set(versions)) != len(versions):25918 msg = f"Duplicate migration versions: {versions}"25919> raise MigrationError(msg)25920E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2592125922nixbot/migrations.py:67: MigrationError25923___________ ERROR at setup of test_scheduled_run_notify_build_events ___________25924[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142592525926request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25927tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2592825929 @pytest.fixture(scope="module")25930 def postgres_dsn(25931 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25932 ) -> Iterator[str]:25933 if shutil.which("initdb") is None:25934 pytest.skip("postgresql not available")25935 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25936> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25937 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2593825939nixbot/tests/conftest.py:33: 25940_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25941/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25942 return next(self.gen)25943 ^^^^^^^^^^^^^^25944nixbot/tests/support.py:327: in ephemeral_postgres25945 run_sync(apply_migrations(dsn))25946nixbot/tests/support.py:285: in run_sync25947 return executor.submit(asyncio.run, coro).result(timeout=120)25948 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25949/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25950 return self.__get_result()25951 ^^^^^^^^^^^^^^^^^^^25952/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25953 raise self._exception25954/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25955 result = ctx.run(self.task)25956 ^^^^^^^^^^^^^^^^^^25957/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25958 return fn(*args, **kwargs)25959 ^^^^^^^^^^^^^^^^^^^25960/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25961 return runner.run(main)25962 ^^^^^^^^^^^^^^^^25963/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25964 return self._loop.run_until_complete(task)25965 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25966/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25967 return future.result()25968 ^^^^^^^^^^^^^^^25969nixbot/migrations.py:99: in apply_migrations25970 migrations = load_migrations()25971 ^^^^^^^^^^^^^^^^^25972_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2597325974 def load_migrations() -> list[Migration]:25975 """Load migration scripts shipped with the package, ordered by version."""25976 migrations = []25977 for entry in resources.files(__package__).joinpath("migrations").iterdir():25978 m = _SCRIPT_RE.match(entry.name)25979 if m is None:25980 continue25981 migrations.append(25982 Migration(25983 version=int(m.group(1)),25984 name=m.group(2),25985 sql=entry.read_text(),25986 )25987 )25988 migrations.sort(key=lambda mig: mig.version)25989 versions = [m.version for m in migrations]25990 if len(set(versions)) != len(versions):25991 msg = f"Duplicate migration versions: {versions}"25992> raise MigrationError(msg)25993E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2599425995nixbot/migrations.py:67: MigrationError25996_________________ ERROR at setup of test_api_log_toc_and_text __________________25997[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142599825999request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>26000tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2600126002 @pytest.fixture(scope="module")26003 def postgres_dsn(26004 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory26005 ) -> Iterator[str]:26006 if shutil.which("initdb") is None:26007 pytest.skip("postgresql not available")26008 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")26009> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:26010 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2601126012nixbot/tests/conftest.py:33: 26013_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 26014/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__26015 return next(self.gen)26016 ^^^^^^^^^^^^^^26017nixbot/tests/support.py:327: in ephemeral_postgres26018 run_sync(apply_migrations(dsn))26019nixbot/tests/support.py:285: in run_sync26020 return executor.submit(asyncio.run, coro).result(timeout=120)26021 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26022/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result26023 return self.__get_result()26024 ^^^^^^^^^^^^^^^^^^^26025/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result26026 raise self._exception26027/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run26028 result = ctx.run(self.task)26029 ^^^^^^^^^^^^^^^^^^26030/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run26031 return fn(*args, **kwargs)26032 ^^^^^^^^^^^^^^^^^^^26033/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run26034 return runner.run(main)26035 ^^^^^^^^^^^^^^^^26036/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run26037 return self._loop.run_until_complete(task)26038 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26039/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete26040 return future.result()26041 ^^^^^^^^^^^^^^^26042nixbot/migrations.py:99: in apply_migrations26043 migrations = load_migrations()26044 ^^^^^^^^^^^^^^^^^26045_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2604626047 def load_migrations() -> list[Migration]:26048 """Load migration scripts shipped with the package, ordered by version."""26049 migrations = []26050 for entry in resources.files(__package__).joinpath("migrations").iterdir():26051 m = _SCRIPT_RE.match(entry.name)26052 if m is None:26053 continue26054 migrations.append(26055 Migration(26056 version=int(m.group(1)),26057 name=m.group(2),26058 sql=entry.read_text(),26059 )26060 )26061 migrations.sort(key=lambda mig: mig.version)26062 versions = [m.version for m in migrations]26063 if len(set(versions)) != len(versions):26064 msg = f"Duplicate migration versions: {versions}"26065> raise MigrationError(msg)26066E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2606726068nixbot/migrations.py:67: MigrationError26069_____________ ERROR at setup of test_api_log_toc_flat_log_fallback _____________26070[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142607126072request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>26073tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2607426075 @pytest.fixture(scope="module")26076 def postgres_dsn(26077 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory26078 ) -> Iterator[str]:26079 if shutil.which("initdb") is None:26080 pytest.skip("postgresql not available")26081 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")26082> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:26083 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2608426085nixbot/tests/conftest.py:33: 26086_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 26087/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__26088 return next(self.gen)26089 ^^^^^^^^^^^^^^26090nixbot/tests/support.py:327: in ephemeral_postgres26091 run_sync(apply_migrations(dsn))26092nixbot/tests/support.py:285: in run_sync26093 return executor.submit(asyncio.run, coro).result(timeout=120)26094 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26095/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result26096 return self.__get_result()26097 ^^^^^^^^^^^^^^^^^^^26098/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result26099 raise self._exception26100/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run26101 result = ctx.run(self.task)26102 ^^^^^^^^^^^^^^^^^^26103/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run26104 return fn(*args, **kwargs)26105 ^^^^^^^^^^^^^^^^^^^26106/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run26107 return runner.run(main)26108 ^^^^^^^^^^^^^^^^26109/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run26110 return self._loop.run_until_complete(task)26111 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26112/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete26113 return future.result()26114 ^^^^^^^^^^^^^^^26115nixbot/migrations.py:99: in apply_migrations26116 migrations = load_migrations()26117 ^^^^^^^^^^^^^^^^^26118_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2611926120 def load_migrations() -> list[Migration]:26121 """Load migration scripts shipped with the package, ordered by version."""26122 migrations = []26123 for entry in resources.files(__package__).joinpath("migrations").iterdir():26124 m = _SCRIPT_RE.match(entry.name)26125 if m is None:26126 continue26127 migrations.append(26128 Migration(26129 version=int(m.group(1)),26130 name=m.group(2),26131 sql=entry.read_text(),26132 )26133 )26134 migrations.sort(key=lambda mig: mig.version)26135 versions = [m.version for m in migrations]26136 if len(set(versions)) != len(versions):26137 msg = f"Duplicate migration versions: {versions}"26138> raise MigrationError(msg)26139E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2614026141nixbot/migrations.py:67: MigrationError26142__________________ ERROR at setup of test_api_log_stream_json __________________26143[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142614426145request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>26146tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2614726148 @pytest.fixture(scope="module")26149 def postgres_dsn(26150 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory26151 ) -> Iterator[str]:26152 if shutil.which("initdb") is None:26153 pytest.skip("postgresql not available")26154 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")26155> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:26156 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2615726158nixbot/tests/conftest.py:33: 26159_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 26160/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__26161 return next(self.gen)26162 ^^^^^^^^^^^^^^26163nixbot/tests/support.py:327: in ephemeral_postgres26164 run_sync(apply_migrations(dsn))26165nixbot/tests/support.py:285: in run_sync26166 return executor.submit(asyncio.run, coro).result(timeout=120)26167 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26168/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result26169 return self.__get_result()26170 ^^^^^^^^^^^^^^^^^^^26171/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result26172 raise self._exception26173/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run26174 result = ctx.run(self.task)26175 ^^^^^^^^^^^^^^^^^^26176/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run26177 return fn(*args, **kwargs)26178 ^^^^^^^^^^^^^^^^^^^26179/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run26180 return runner.run(main)26181 ^^^^^^^^^^^^^^^^26182/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run26183 return self._loop.run_until_complete(task)26184 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26185/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete26186 return future.result()26187 ^^^^^^^^^^^^^^^26188nixbot/migrations.py:99: in apply_migrations26189 migrations = load_migrations()26190 ^^^^^^^^^^^^^^^^^26191_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2619226193 def load_migrations() -> list[Migration]:26194 """Load migration scripts shipped with the package, ordered by version."""26195 migrations = []26196 for entry in resources.files(__package__).joinpath("migrations").iterdir():26197 m = _SCRIPT_RE.match(entry.name)26198 if m is None:26199 continue26200 migrations.append(26201 Migration(26202 version=int(m.group(1)),26203 name=m.group(2),26204 sql=entry.read_text(),26205 )26206 )26207 migrations.sort(key=lambda mig: mig.version)26208 versions = [m.version for m in migrations]26209 if len(set(versions)) != len(versions):26210 msg = f"Duplicate migration versions: {versions}"26211> raise MigrationError(msg)26212E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2621326214nixbot/migrations.py:67: MigrationError26215_______________ ERROR at setup of test_build_eval_stats_surface ________________26216[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142621726218request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>26219tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2622026221 @pytest.fixture(scope="module")26222 def postgres_dsn(26223 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory26224 ) -> Iterator[str]:26225 if shutil.which("initdb") is None:26226 pytest.skip("postgresql not available")26227 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")26228> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:26229 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2623026231nixbot/tests/conftest.py:33: 26232_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 26233/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__26234 return next(self.gen)26235 ^^^^^^^^^^^^^^26236nixbot/tests/support.py:327: in ephemeral_postgres26237 run_sync(apply_migrations(dsn))26238nixbot/tests/support.py:285: in run_sync26239 return executor.submit(asyncio.run, coro).result(timeout=120)26240 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26241/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result26242 return self.__get_result()26243 ^^^^^^^^^^^^^^^^^^^26244/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result26245 raise self._exception26246/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run26247 result = ctx.run(self.task)26248 ^^^^^^^^^^^^^^^^^^26249/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run26250 return fn(*args, **kwargs)26251 ^^^^^^^^^^^^^^^^^^^26252/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run26253 return runner.run(main)26254 ^^^^^^^^^^^^^^^^26255/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run26256 return self._loop.run_until_complete(task)26257 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26258/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete26259 return future.result()26260 ^^^^^^^^^^^^^^^26261nixbot/migrations.py:99: in apply_migrations26262 migrations = load_migrations()26263 ^^^^^^^^^^^^^^^^^26264_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2626526266 def load_migrations() -> list[Migration]:26267 """Load migration scripts shipped with the package, ordered by version."""26268 migrations = []26269 for entry in resources.files(__package__).joinpath("migrations").iterdir():26270 m = _SCRIPT_RE.match(entry.name)26271 if m is None:26272 continue26273 migrations.append(26274 Migration(26275 version=int(m.group(1)),26276 name=m.group(2),26277 sql=entry.read_text(),26278 )26279 )26280 migrations.sort(key=lambda mig: mig.version)26281 versions = [m.version for m in migrations]26282 if len(set(versions)) != len(versions):26283 msg = f"Duplicate migration versions: {versions}"26284> raise MigrationError(msg)26285E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2628626287nixbot/migrations.py:67: MigrationError26288=================================== FAILURES ===================================26289_____________________________ test_load_migrations _____________________________26290[gw11] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142629126292 def test_load_migrations() -> None:26293> migrations = load_migrations()26294 ^^^^^^^^^^^^^^^^^2629526296nixbot/tests/test_db.py:33: 26297_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2629826299 def load_migrations() -> list[Migration]:26300 """Load migration scripts shipped with the package, ordered by version."""26301 migrations = []26302 for entry in resources.files(__package__).joinpath("migrations").iterdir():26303 m = _SCRIPT_RE.match(entry.name)26304 if m is None:26305 continue26306 migrations.append(26307 Migration(26308 version=int(m.group(1)),26309 name=m.group(2),26310 sql=entry.read_text(),26311 )26312 )26313 migrations.sort(key=lambda mig: mig.version)26314 versions = [m.version for m in migrations]26315 if len(set(versions)) != len(versions):26316 msg = f"Duplicate migration versions: {versions}"26317> raise MigrationError(msg)26318E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2631926320nixbot/migrations.py:67: MigrationError26321=========================== short test summary info ============================26322FAILED nixbot/tests/test_db.py::test_load_migrations - nixbot.migrations.Migr...26323ERROR nixbot/tests/test_db.py::test_migrations_idempotent - nixbot.migrations...26324ERROR nixbot/tests/test_recovery.py::test_resume_skips_terminal_attributes - ...26325ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_distinct_per_effect26326ERROR nixbot/tests/test_web.py::test_html_error_pages - nixbot.migrations.Mig...26327ERROR nixbot/tests/test_upload.py::test_chunk_args_splits_on_byte_limit - nix...26328ERROR nixbot/tests/test_orchestrator.py::test_full_lifecycle - nixbot.migrati...26329ERROR nixbot/tests/test_cli.py::test_repo_list_and_toggle - nixbot.migrations...26330ERROR nixbot/tests/test_visibility.py::test_anonymous_sees_public_only - nixb...26331ERROR nixbot/tests/test_forge.py::test_project_store_sync_and_legacy_import26332ERROR nixbot/tests/test_cli_api.py::test_repos_and_builds - nixbot.migrations...26333ERROR nixbot/tests/test_schedules.py::test_replace_schedules_preserves_last_run_for_unchanged_spec26334ERROR nixbot/tests/test_db.py::test_failed_migration_error_not_masked - nixbo...26335ERROR nixbot/tests/test_deliver.py::test_match_skip_and_run - nixbot.migratio...26336ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_sanitizes_traversal26337ERROR nixbot/tests/test_recovery.py::test_settle_already_built - nixbot.migra...26338ERROR nixbot/tests/test_upload.py::test_parse_path_info_both_formats - nixbot...26339ERROR nixbot/tests/test_control.py::test_control_buttons_hidden_without_permission26340ERROR nixbot/tests/test_web.py::test_api_strips_ansi_from_errors - nixbot.mig...26341ERROR nixbot/tests/e2e/test_browse.py::test_homepage_lists_project_and_recent_builds26342ERROR nixbot/tests/test_visibility.py::test_unauthorized_user_sees_public_only26343ERROR nixbot/tests/test_cli.py::test_build_list_and_view - nixbot.migrations....26344ERROR nixbot/tests/test_orchestrator.py::test_failure_aggregation - nixbot.mi...26345ERROR nixbot/tests/test_cli_api.py::test_finished_attrs_cursor - nixbot.migra...26346ERROR nixbot/tests/test_service.py::test_resolve_credential_path - nixbot.mig...26347ERROR nixbot/tests/test_deliver.py::test_permission_denied_records_reason - n...26348ERROR nixbot/tests/test_work_queue.py::test_enqueue_dedupes_pending - nixbot....26349ERROR nixbot/tests/test_schedules.py::test_replace_schedules_tolerates_duplicate_effect_names26350ERROR nixbot/tests/test_db.py::test_edited_migration_rejected - nixbot.migrat...26351ERROR nixbot/tests/test_web.py::test_homepage - nixbot.migrations.MigrationEr...26352ERROR nixbot/tests/test_control.py::test_admin_can_restart_and_cancel - nixbo...26353ERROR nixbot/tests/test_recovery.py::test_retention_cleanup - nixbot.migratio...26354ERROR nixbot/tests/test_upload.py::test_final_upload_reports_and_clears_queue26355ERROR nixbot/tests/e2e/test_browse.py::test_navigate_sidebar_to_failed_build26356ERROR nixbot/tests/test_visibility.py::test_authorized_user_sees_private - ni...26357ERROR nixbot/tests/test_cli.py::test_build_restart_cancel - nixbot.migrations...26358ERROR nixbot/tests/test_orchestrator.py::test_tree_hash_reuse - nixbot.migrat...26359ERROR nixbot/tests/test_cli_api.py::test_control_requires_token - nixbot.migr...26360ERROR nixbot/tests/test_forge.py::test_legacy_import_runs_despite_pull_based_rows26361ERROR nixbot/tests/test_deliver.py::test_modified_files_gate - nixbot.migrati...26362ERROR nixbot/tests/test_service.py::test_build_service_accepts_asyncpg_dsn - ...26363ERROR nixbot/tests/test_work_queue.py::test_claim_serializes_per_key - nixbot...26364ERROR nixbot/tests/test_schedules.py::test_store_roundtrip_and_due - nixbot.m...26365ERROR nixbot/tests/test_web.py::test_project_page_with_filters - nixbot.migra...26366ERROR nixbot/tests/test_control.py::test_pr_author_can_control_own_pr - nixbo...26367ERROR nixbot/tests/test_db.py::test_catchup_migration_repairs_pre_0033_schema26368ERROR nixbot/tests/test_upload.py::test_intermediates_batch_with_final_and_drop_invalid26369ERROR nixbot/tests/test_visibility.py::test_admin_sees_everything - nixbot.mi...26370ERROR nixbot/tests/e2e/test_browse.py::test_build_prev_next_navigation - nixb...26371ERROR nixbot/tests/test_recovery.py::test_resume_includes_interrupted_building_attributes26372ERROR nixbot/tests/test_cli.py::test_log_summary_attr_and_drv - nixbot.migrat...26373ERROR nixbot/tests/test_cli_api.py::test_enable_disable - nixbot.migrations.M...26374ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_from_cancelled_build26375ERROR nixbot/tests/test_web.py::test_status_badge_urls - nixbot.migrations.Mi...26376ERROR nixbot/tests/test_control.py::test_repo_writer_can_control_without_admin_or_authorship26377ERROR nixbot/tests/test_forge.py::test_legacy_import_scopes_topics_per_forge26378ERROR nixbot/tests/test_deliver.py::test_forge_outage_is_retried - nixbot.mig...26379ERROR nixbot/tests/test_service.py::test_visibility_fetcher_and_cache_ttl_wired26380ERROR nixbot/tests/test_work_queue.py::test_settle_interrupted_requeues - nix...26381ERROR nixbot/tests/test_db.py::test_huge_attr_name_does_not_break_notify_trigger26382ERROR nixbot/tests/test_schedules.py::test_due_effects_window_and_bad_spec - ...26383ERROR nixbot/tests/e2e/test_browse.py::test_structured_log_viewer - nixbot.mi...26384ERROR nixbot/tests/test_visibility.py::test_admin_sees_disabled_repos_without_search26385ERROR nixbot/tests/test_upload.py::test_stdin_mode - nixbot.migrations.Migrat...26386ERROR nixbot/tests/test_recovery.py::test_retention_skips_restarted_builds - ...26387ERROR nixbot/tests/test_cli.py::test_repo_and_build_inference - nixbot.migrat...26388ERROR nixbot/tests/test_cli_api.py::test_log_toc_and_text - nixbot.migrations...26389ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_skipped_when_drvs_gone26390ERROR nixbot/tests/test_control.py::test_cancel_all_requires_admin - nixbot.m...26391ERROR nixbot/tests/test_web.py::test_all_digit_branch_is_filterable - nixbot....26392ERROR nixbot/tests/test_deliver.py::test_forge_outage_gives_up - nixbot.migra...26393ERROR nixbot/tests/test_forge.py::test_prune_missing_disabled_projects - nixb...26394ERROR nixbot/tests/test_service.py::test_aclose_cancels_in_flight_tasks - nix...26395ERROR nixbot/tests/e2e/test_browse.py::test_project_filter_form - nixbot.migr...26396ERROR nixbot/tests/test_db.py::test_schema_constraints - nixbot.migrations.Mi...26397ERROR nixbot/tests/test_visibility.py::test_non_admin_does_not_see_disabled_repos26398ERROR nixbot/tests/test_schedules.py::test_run_recording_and_overview - nixbo...26399ERROR nixbot/tests/test_upload.py::test_pending_paths_survive_restart - nixbo...26400ERROR nixbot/tests/test_cli.py::test_auth_status - nixbot.migrations.Migratio...26401ERROR nixbot/tests/test_recovery.py::test_retention_ages_out_failed_caches - ...26402ERROR nixbot/tests/test_control.py::test_cancel_all_cancels_pending_and_running_builds26403ERROR nixbot/tests/test_orchestrator.py::test_main_push_promotes_reused_pr_build26404ERROR nixbot/tests/test_web.py::test_build_page - nixbot.migrations.Migration...26405ERROR nixbot/tests/e2e/test_browse.py::test_attribute_log_prev_next_navigation26406ERROR nixbot/tests/test_forge.py::test_project_store_sync_skips_unchanged_rows26407ERROR nixbot/tests/test_deliver.py::test_lock_shared_with_push_effect_and_supersession26408ERROR nixbot/tests/test_service.py::test_pr_close_discards_queued_changes - n...26409ERROR nixbot/tests/test_visibility.py::test_api_token_sees_private - nixbot.m...26410ERROR nixbot/tests/test_db.py::test_check_run_store_round_trip - nixbot.migra...26411ERROR nixbot/tests/test_upload.py::test_uploader_factory_picks_stream - nixbo...26412ERROR nixbot/tests/e2e/test_live.py::test_attribute_table_refreshes_while_building26413ERROR nixbot/tests/test_control.py::test_cancel_all_button_admin_only - nixbo...26414ERROR nixbot/tests/test_web.py::test_attribute_rows_fragment_paginates - nixb...26415ERROR nixbot/tests/test_recovery.py::test_failed_rebuild_settles_pending_effects26416ERROR nixbot/tests/e2e/test_browse.py::test_project_filter - nixbot.migration...26417ERROR nixbot/tests/test_orchestrator.py::test_merge_conflict_fails_build - ni...26418ERROR nixbot/tests/test_visibility.py::test_admin_api_token_sees_private - ni...26419ERROR nixbot/tests/test_forge.py::test_gitea_hook_registration - nixbot.migra...26420ERROR nixbot/tests/test_deliver.py::test_checkout_is_pr_head_without_token - ...26421ERROR nixbot/tests/test_service.py::test_build_branches_gates_branch_pushes26422ERROR nixbot/tests/e2e/test_live.py::test_log_page_streams_live_output - nixb...26423ERROR nixbot/tests/test_db.py::test_failed_status_store_component - nixbot.mi...26424ERROR nixbot/tests/test_upload.py::test_stream_reports_per_path_and_clears_queue26425ERROR nixbot/tests/test_control.py::test_csrf_cross_origin_rejected - nixbot....26426ERROR nixbot/tests/e2e/test_browse.py::test_activity_shows_running_build - ni...26427ERROR nixbot/tests/test_web.py::test_build_page_shows_eval_warning_groups - n...26428ERROR nixbot/tests/test_orchestrator.py::test_build_reuse_clears_pr_author_in_other_context26429ERROR nixbot/tests/test_visibility.py::test_forge_repo_admins_can_toggle_their_repos26430ERROR nixbot/tests/e2e/test_live.py::test_log_page_keeps_up_with_a_line_burst26431ERROR nixbot/tests/test_recovery.py::test_rerun_clears_stale_eval_warnings - ...26432ERROR nixbot/tests/test_forge.py::test_gitlab_heads_carry_target_branch_base26433ERROR nixbot/tests/test_db.py::test_failed_build_cache_component - nixbot.mig...26434ERROR nixbot/tests/test_deliver.py::test_build_success_enqueues_delivery - ni...26435ERROR nixbot/tests/test_upload.py::test_stream_error_is_reported_with_message26436ERROR nixbot/tests/test_control.py::test_restart_single_attribute - nixbot.mi...26437ERROR nixbot/tests/e2e/test_browse.py::test_activity_infinite_scroll - nixbot...26438ERROR nixbot/tests/test_web.py::test_build_page_shows_per_attribute_eval_warnings26439ERROR nixbot/tests/test_visibility.py::test_forge_repo_writers_can_control_their_repos26440ERROR nixbot/tests/test_orchestrator.py::test_effects_started_flag - nixbot.m...26441ERROR nixbot/tests/test_service.py::test_restart_gitlab_mr_build_fetches_mr_refs26442ERROR nixbot/tests/e2e/test_live.py::test_repeated_activity_keeps_one_card - ...26443ERROR nixbot/tests/test_forge.py::test_gitea_heads_encode_slashed_default_branch26444ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_fail_on_recovery26445ERROR nixbot/tests/test_control.py::test_restart_unknown_attribute_is_404 - n...26446ERROR nixbot/tests/test_upload.py::test_stream_child_crash_refeeds_pending - ...26447ERROR nixbot/tests/test_db.py::test_get_or_create_build_concurrent_no_duplicates26448ERROR nixbot/tests/e2e/test_browse.py::test_no_horizontal_overflow_on_mobile26449ERROR nixbot/tests/test_web.py::test_build_page_renders_ansi_in_error - nixbo...26450ERROR nixbot/tests/test_visibility.py::test_fetch_errors_are_not_cached - nix...26451ERROR nixbot/tests/test_cli.py::test_log_follow_finished_attr_falls_back_to_stored_log26452ERROR nixbot/tests/test_service.py::test_restart_eval_failed_build_reevaluates26453ERROR nixbot/tests/test_orchestrator.py::test_aggregation_generation_monotonic26454ERROR nixbot/tests/test_control.py::test_restart_attribute_with_special_chars_redirects_encoded26455ERROR nixbot/tests/test_deliver.py::test_comment_and_close_webhooks_deliver26456ERROR nixbot/tests/e2e/test_browse.py::test_attribute_search_filters_groups26457ERROR nixbot/tests/test_forge.py::test_reconcile_unbuilt_heads - nixbot.migra...26458ERROR nixbot/tests/test_web.py::test_running_build_shows_progress - nixbot.mi...26459ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_sweep_spares_live_effects26460ERROR nixbot/tests/test_db.py::test_commit_eval_result_atomic - nixbot.migrat...26461ERROR nixbot/tests/test_upload.py::test_failure_reports_retries_and_gives_up26462ERROR nixbot/tests/test_visibility.py::test_access_cache_used - nixbot.migrat...26463ERROR nixbot/tests/test_service.py::test_restart_clears_stale_error_and_warnings26464ERROR nixbot/tests/test_control.py::test_admin_project_toggle - nixbot.migrat...26465ERROR nixbot/tests/test_orchestrator.py::test_internal_error_not_recorded_in_failed_build_cache26466ERROR nixbot/tests/test_deliver.py::test_close_after_merge_push_reused_build26467ERROR nixbot/tests/test_web.py::test_build_page_live_markers - nixbot.migrati...26468ERROR nixbot/tests/e2e/test_browse.py::test_groups_keep_identity_when_one_appears26469ERROR nixbot/tests/test_forge.py::test_gitea_watermark_stops_pagination - nix...26470ERROR nixbot/tests/test_visibility.py::test_metrics_unauthenticated_no_private_names26471ERROR nixbot/tests/test_db.py::test_cancelled_build_not_reused - nixbot.migra...26472ERROR nixbot/tests/test_control.py::test_toggle_activates_newly_enabled_project26473ERROR nixbot/tests/test_web.py::test_attribute_history - nixbot.migrations.Mi...26474ERROR nixbot/tests/test_orchestrator.py::test_log_path_attribute_name_sanitized26475ERROR nixbot/tests/test_service.py::test_restart_unknown_attribute_is_a_noop26476ERROR nixbot/tests/test_deliver.py::test_build_finished_transitions - nixbot....26477ERROR nixbot/tests/test_visibility.py::test_configured_viewers_see_private - ...26478ERROR nixbot/tests/test_forge.py::test_gitlab_heads_filter_updated_after - ni...26479ERROR nixbot/tests/test_db.py::test_reuse_backfills_pr_fields - nixbot.migrat...26480ERROR nixbot/tests/test_control.py::test_run_schedule - nixbot.migrations.Mig...26481ERROR nixbot/tests/test_web.py::test_overview_ignores_pr_branches - nixbot.mi...26482ERROR nixbot/tests/test_visibility.py::test_api_token_inherits_login_groups26483ERROR nixbot/tests/test_service.py::test_restart_failed_eval_attribute_reevaluates26484ERROR nixbot/tests/test_orchestrator.py::test_cancel_interrupts_evaluation - ...26485ERROR nixbot/tests/test_deliver.py::test_command_while_running_gets_notice - ...26486ERROR nixbot/tests/test_db.py::test_reuse_by_other_pr_clears_both_identity_fields26487ERROR nixbot/tests/test_forge.py::test_reconcile_watermark_store - nixbot.mig...26488ERROR nixbot/tests/test_control.py::test_repo_refresh - nixbot.migrations.Mig...26489ERROR nixbot/tests/test_web.py::test_pending_build_shows_eval_blocker - nixbo...26490ERROR nixbot/tests/test_visibility.py::test_logout_invalidates_access_cache26491ERROR nixbot/tests/test_orchestrator.py::test_build_waiting_for_eval_slot_stays_pending26492ERROR nixbot/tests/test_service.py::test_interrupted_reeval_keeps_attribute_rows26493ERROR nixbot/tests/test_deliver.py::test_other_command_does_not_supersede - n...26494ERROR nixbot/tests/test_db.py::test_branch_push_takes_over_reused_pr_build - ...26495ERROR nixbot/tests/test_control.py::test_api_enable_disable - nixbot.migratio...26496ERROR nixbot/tests/test_forge.py::test_register_repo_hook_without_admin_warns26497ERROR nixbot/tests/test_web.py::test_project_filter_escapes_like_wildcards - ...26498ERROR nixbot/tests/test_orchestrator.py::test_pending_attribute_rows_recorded_for_crash_recovery26499ERROR nixbot/tests/test_deliver.py::test_label_change_redelivers_pull_request26500ERROR nixbot/tests/test_service.py::test_restart_cancelled_build_reschedules_attributes26501ERROR nixbot/tests/test_control.py::test_api_restart_and_cancel - nixbot.migr...26502ERROR nixbot/tests/test_db.py::test_pr_does_not_capture_branch_push_build - n...26503ERROR nixbot/tests/test_web.py::test_page_out_of_range_does_not_error - nixbo...26504ERROR nixbot/tests/test_forge.py::test_gitlab_hook_registration - nixbot.migr...26505ERROR nixbot/tests/test_orchestrator.py::test_eval_warnings_null_when_empty26506ERROR nixbot/tests/test_deliver.py::test_build_outcome_and_restart_leave_event_history26507ERROR nixbot/tests/test_control.py::test_api_token_lifecycle - nixbot.migrati...26508ERROR nixbot/tests/test_service.py::test_restart_cancelled_mid_eval_reevaluates26509ERROR nixbot/tests/test_web.py::test_activity_page - nixbot.migrations.Migrat...26510ERROR nixbot/tests/test_db.py::test_complete_attribute_preserves_eval_outputs26511ERROR nixbot/tests/test_forge.py::test_register_repo_hook_500_with_403_in_body_raises26512ERROR nixbot/tests/test_orchestrator.py::test_rerun_flips_stale_red_eval_status26513ERROR nixbot/tests/test_control.py::test_expired_api_tokens_pruned - nixbot.m...26514ERROR nixbot/tests/test_deliver.py::test_restart_event_effect_reruns_with_stored_payload26515ERROR nixbot/tests/test_web.py::test_activity_no_sentinel_on_exact_page - nix...26516ERROR nixbot/tests/test_service.py::test_restart_while_unwinding_waits_then_runs26517ERROR nixbot/tests/test_db.py::test_complete_attribute_marks_substituted_as_cached26518ERROR nixbot/tests/test_forge.py::test_gitlab_register_repo_hook_status_classification26519ERROR nixbot/tests/test_control.py::test_token_creation_with_expiry - nixbot....26520ERROR nixbot/tests/test_web.py::test_activity_rows_fragment_pagination - nixb...26521ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_failures_not_cached26522ERROR nixbot/tests/test_deliver.py::test_listing_failure_recorded_on_build - ...26523ERROR nixbot/tests/test_service.py::test_restart_attribute_while_build_running26524ERROR nixbot/tests/test_forge.py::test_gitea_legacy_hook_delete_failure_warns26525ERROR nixbot/tests/test_control.py::test_proxy_user_can_manage_api_tokens - n...26526ERROR nixbot/tests/test_web.py::test_project_rows_fragment_filters - nixbot.m...26527ERROR nixbot/tests/test_orchestrator.py::test_gitlab_mr_fetches_merge_request_refs26528ERROR nixbot/tests/test_service.py::test_cancel_not_running_posts_forge_status26529ERROR nixbot/tests/test_db.py::test_complete_attribute_replaces_log_metadata26530ERROR nixbot/tests/test_control.py::test_bearer_token_cannot_manage_api_tokens26531ERROR nixbot/tests/test_web.py::test_metrics_are_gauges - nixbot.migrations.M...26532ERROR nixbot/tests/test_forge.py::test_sync_tolerates_in_batch_duplicates - n...26533ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[github]26534ERROR nixbot/tests/test_service.py::test_check_rerequested_dispatch - nixbot....26535ERROR nixbot/tests/test_db.py::test_record_attributes_persists_pending_rows_with_outputs26536ERROR nixbot/tests/test_control.py::test_api_token_controls_build - nixbot.mi...26537ERROR nixbot/tests/test_web.py::test_metrics_are_cached - nixbot.migrations.M...26538ERROR nixbot/tests/test_service.py::test_cancel_not_running_settles_attribute_rows26539ERROR nixbot/tests/test_db.py::test_mark_attribute_building_does_not_resurrect_cancelled_rows26540ERROR nixbot/tests/test_control.py::test_build_service_composition - nixbot.m...26541ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[gitlab]26542ERROR nixbot/tests/test_web.py::test_static_urls_carry_content_version - nixb...26543ERROR nixbot/tests/test_service.py::test_cancel_attribute_not_running_reaggregates_build26544ERROR nixbot/tests/test_db.py::test_mark_attribute_building_sets_status_and_started_at26545ERROR nixbot/tests/test_control.py::test_restart_removes_stale_logs - nixbot....26546ERROR nixbot/tests/test_orchestrator.py::test_cancelled_build_reuse_rebuilds26547ERROR nixbot/tests/test_web.py::test_legacy_project_urls_redirect - nixbot.mi...26548ERROR nixbot/tests/test_service.py::test_pull_based_projects_synced_and_buildable26549ERROR nixbot/tests/test_db.py::test_complete_attribute_if_unfinished_skips_terminal_rows26550ERROR nixbot/tests/test_orchestrator.py::test_inflight_share_fans_out_final_status26551ERROR nixbot/tests/test_web.py::test_private_repo_public_badge_bypasses_session_visibility26552ERROR nixbot/tests/test_control.py::test_restart_clears_failed_cache - nixbot...26553ERROR nixbot/tests/test_service.py::test_topic_does_not_hard_filter_discovery26554ERROR nixbot/tests/test_db.py::test_failed_build_cache_scoped_per_project - n...26555ERROR nixbot/tests/test_web.py::test_legacy_redirect_hides_invisible_projects26556ERROR nixbot/tests/test_orchestrator.py::test_stale_event_does_not_supersede_newer_build26557ERROR nixbot/tests/test_control.py::test_webhook_setup_shown_to_admin_only - ...26558ERROR nixbot/tests/test_service.py::test_startup_reevaluates_interrupted_eval26559ERROR nixbot/tests/test_db.py::test_eval_stats_lifecycle - nixbot.migrations....26560ERROR nixbot/tests/test_web.py::test_legacy_redirect_404s_on_ambiguous_owner_name26561ERROR nixbot/tests/test_orchestrator.py::test_eval_failure_cleans_cancel_events26562ERROR nixbot/tests/test_control.py::test_webhook_secret_regeneration - nixbot...26563ERROR nixbot/tests/test_service.py::test_rerun_of_interrupted_eval_reevaluates26564ERROR nixbot/tests/test_web.py::test_health_and_static - nixbot.migrations.Mi...26565ERROR nixbot/tests/test_orchestrator.py::test_eval_settings_wired - nixbot.mi...26566ERROR nixbot/tests/test_control.py::test_retry_after_parsing - nixbot.migrati...26567ERROR nixbot/tests/test_service.py::test_rerun_resumes_building_rows_and_keeps_finished26568ERROR nixbot/tests/test_web.py::test_404s - nixbot.migrations.MigrationError:...26569ERROR nixbot/tests/test_control.py::test_work_retry_delay_honors_retry_after26570ERROR nixbot/tests/test_orchestrator.py::test_eval_netrc_withheld_from_pr_with_instance_wide_creds26571ERROR nixbot/tests/test_service.py::test_rerun_reevaluates_when_drv_paths_were_garbage_collected26572ERROR nixbot/tests/test_control.py::test_report_retry - nixbot.migrations.Mig...26573ERROR nixbot/tests/test_web.py::test_log_viewer_and_raw - nixbot.migrations.M...26574ERROR nixbot/tests/test_orchestrator.py::test_eval_gcroots_dir_removed_after_build26575ERROR nixbot/tests/test_service.py::test_reeval_failure_marks_build_failed - ...26576ERROR nixbot/tests/test_web.py::test_structured_log_endpoints - nixbot.migrat...26577ERROR nixbot/tests/test_control.py::test_effect_item_setup_failure_settles_row26578ERROR nixbot/tests/test_orchestrator.py::test_effects_run_after_default_branch_success26579ERROR nixbot/tests/test_service.py::test_gitlab_discovery_and_hook_registration26580ERROR nixbot/tests/test_web.py::test_structured_log_window_caps_huge_derivation26581ERROR nixbot/tests/test_control.py::test_restart_attribute_posts_pending - ni...26582ERROR nixbot/tests/test_orchestrator.py::test_pr_worktree_config_cannot_grant_effects26583ERROR nixbot/tests/test_web.py::test_attr_named_dot_txt_not_shadowed_by_raw_route26584ERROR nixbot/tests/test_control.py::test_recovery_reports_interrupted_effects26585ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_runs_effects_again26586ERROR nixbot/tests/test_service.py::test_health_serves_while_startup_blocks26587ERROR nixbot/tests/test_web.py::test_attr_names_with_special_characters - nix...26588ERROR nixbot/tests/test_control.py::test_work_dispatch - nixbot.migrations.Mi...26589ERROR nixbot/tests/test_web.py::test_log_viewer_waits_for_queued_attribute - ...26590ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_cancels_hung_effect26591ERROR nixbot/tests/test_control.py::test_restart_resets_effects - nixbot.migr...26592ERROR nixbot/tests/test_web.py::test_log_viewer_unavailable_for_logless_status26593ERROR nixbot/tests/test_orchestrator.py::test_rerun_single_effect - nixbot.mi...26594ERROR nixbot/tests/test_control.py::test_effects_restart_route - nixbot.migra...26595ERROR nixbot/tests/test_web.py::test_eval_error_served_like_build_log - nixbo...26596ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_runs_effects - n...26597ERROR nixbot/tests/test_control.py::test_single_effect_restart_route - nixbot...26598ERROR nixbot/tests/test_web.py::test_api_projects_and_builds - nixbot.migrati...26599ERROR nixbot/tests/test_orchestrator.py::test_unsupported_system_attr_does_not_block_aggregation26600ERROR nixbot/tests/test_control.py::test_webhook_panel_is_forge_aware - nixbo...26601ERROR nixbot/tests/test_web.py::test_build_rows_link_refs - nixbot.migrations...26602ERROR nixbot/tests/test_orchestrator.py::test_linked_context_reported_on_eval_failure26603ERROR nixbot/tests/test_control.py::test_api_attr_and_effects_control - nixbo...26604ERROR nixbot/tests/test_web.py::test_attributes_sort_building_before_pending26605ERROR nixbot/tests/test_orchestrator.py::test_eval_failure_settles_streamed_attributes26606ERROR nixbot/tests/test_web.py::test_queue_sorts_active_before_pending - nixb...26607ERROR nixbot/tests/test_web.py::test_queue_position_is_global_and_skips_running26608ERROR nixbot/tests/test_orchestrator.py::test_effect_rows_roundtrip - nixbot....26609ERROR nixbot/tests/test_web.py::test_openapi_docs - nixbot.migrations.Migrati...26610ERROR nixbot/tests/test_orchestrator.py::test_effect_items_resume_only_pending26611ERROR nixbot/tests/test_web.py::test_structured_live_stream - nixbot.migratio...26612ERROR nixbot/tests/test_orchestrator.py::test_effect_crash_settles_the_row - ...26613ERROR nixbot/tests/test_web.py::test_drv_raw_serves_running_attribute - nixbo...26614ERROR nixbot/tests/test_orchestrator.py::test_concurrent_effects_use_independent_worktrees26615ERROR nixbot/tests/test_web.py::test_log_sse_stream_caps_history_backlog - ni...26616ERROR nixbot/tests/test_orchestrator.py::test_locked_effect_gets_shared_dedup_key26617ERROR nixbot/tests/test_web.py::test_log_sse_stream_neutralizes_carriage_returns26618ERROR nixbot/tests/test_web.py::test_api_builds_commit_filter - nixbot.migrat...26619ERROR nixbot/tests/test_web.py::test_log_tail_param - nixbot.migrations.Migra...26620ERROR nixbot/tests/test_orchestrator.py::test_effect_item_not_claimable_until_dep_settles26621ERROR nixbot/tests/test_orchestrator.py::test_effect_dep_failure_skips_dependent26622ERROR nixbot/tests/test_web.py::test_api_build_failures - nixbot.migrations.M...26623ERROR nixbot/tests/test_orchestrator.py::test_lock_serializes_builds_without_interleaving26624ERROR nixbot/tests/test_web.py::test_api_build_failures_rejects_non_positive_tail26625ERROR nixbot/tests/test_orchestrator.py::test_effect_dep_cycle_fails_discovery26626ERROR nixbot/tests/test_web.py::test_llms_txt - nixbot.migrations.MigrationEr...26627ERROR nixbot/tests/test_orchestrator.py::test_failed_effect_reports_failure_status26628ERROR nixbot/tests/test_web.py::test_event_broker_pushes_status_changes - nix...26629ERROR nixbot/tests/test_orchestrator.py::test_post_process_error_does_not_wedge_build26630ERROR nixbot/tests/test_web.py::test_events_stream_coalesces_burst - nixbot.m...26631ERROR nixbot/tests/test_web.py::test_events_stream_refreshes_visibility - nix...26632ERROR nixbot/tests/test_orchestrator.py::test_unexpected_eval_path_error_settles_build26633ERROR nixbot/tests/test_web.py::test_attribute_search - nixbot.migrations.Mig...26634ERROR nixbot/tests/test_orchestrator.py::test_reuse_empty_succeeded_build_posts_eval_success26635ERROR nixbot/tests/test_web.py::test_build_page_shows_effects - nixbot.migrat...26636ERROR nixbot/tests/test_orchestrator.py::test_stale_event_reusing_old_build_does_not_cancel_newer26637ERROR nixbot/tests/test_web.py::test_build_page_shows_event_effects - nixbot....26638ERROR nixbot/tests/test_orchestrator.py::test_reuse_for_default_branch_push_runs_effects26639ERROR nixbot/tests/test_web.py::test_effect_log_raw_text - nixbot.migrations....26640ERROR nixbot/tests/test_orchestrator.py::test_reuse_replays_effect_statuses_to_new_commit26641ERROR nixbot/tests/test_web.py::test_effect_log_viewer_status_icon - nixbot.m...26642ERROR nixbot/tests/test_orchestrator.py::test_attach_to_already_terminal_build_replays_status26643ERROR nixbot/tests/test_web.py::test_effect_changes_notify_build_events - nix...26644ERROR nixbot/tests/test_web.py::test_effects_state_api - nixbot.migrations.Mi...26645ERROR nixbot/tests/test_orchestrator.py::test_cancel_during_eval_resolves_linked_eval_contexts26646ERROR nixbot/tests/test_web.py::test_pr_comment_api - nixbot.migrations.Migra...26647ERROR nixbot/tests/test_orchestrator.py::test_effect_log_does_not_collide_with_attribute_log26648ERROR nixbot/tests/test_web.py::test_workload_identity_api - nixbot.migration...26649ERROR nixbot/tests/test_orchestrator.py::test_post_process_paths_are_forge_scoped26650ERROR nixbot/tests/test_web.py::test_logout_revokes_session_cookie - nixbot.m...26651ERROR nixbot/tests/test_orchestrator.py::test_effects_phase_error_keeps_succeeded_build26652ERROR nixbot/tests/test_web.py::test_gitlab_nested_group_routes - nixbot.migr...26653ERROR nixbot/tests/test_orchestrator.py::test_reuse_post_process_error_still_reports_status26654ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_renders_ansi - nixb...26655ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_cross_project_40426656ERROR nixbot/tests/test_orchestrator.py::test_reuse_with_missing_output_still_post_processes26657ERROR nixbot/tests/test_web.py::test_scheduled_run_log_unavailable_placeholder26658ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_waiting_before_log26659ERROR nixbot/tests/test_web.py::test_scheduled_run_history_lists_runs - nixbo...26660ERROR nixbot/tests/test_web.py::test_scheduled_run_history_special_chars - ni...26661ERROR nixbot/tests/test_web.py::test_scheduled_run_stream_replays_history - n...26662ERROR nixbot/tests/test_web.py::test_scheduled_run_notify_build_events - nixb...26663ERROR nixbot/tests/test_web.py::test_api_log_toc_and_text - nixbot.migrations...26664ERROR nixbot/tests/test_web.py::test_api_log_toc_flat_log_fallback - nixbot.m...26665ERROR nixbot/tests/test_web.py::test_api_log_stream_json - nixbot.migrations....26666ERROR nixbot/tests/test_web.py::test_build_eval_stats_surface - nixbot.migrat...26667============ 1 failed, 450 passed, 12 skipped, 344 errors in 11.81s ============