elastic-arm-8f3b9cfd: building cxwczd2sn9fv8hnlw4ahj0lj7wqwdgvq-mcptoon-0.7.23.drv Sourcing python-remove-tests-dir-hook Sourcing python-catch-conflicts-hook.sh Sourcing python-remove-bin-bytecode-hook.sh Sourcing pypa-build-hook Using pypaBuildPhase Sourcing python-runtime-deps-check-hook Using pythonRuntimeDepsCheckHook Sourcing pypa-install-hook Using pypaInstallPhase Sourcing python-imports-check-hook.sh Using pythonImportsCheckPhase Sourcing python-namespaces-hook Sourcing python-catch-conflicts-hook.sh Sourcing pytest-check-hook Using pytestCheckPhase Running phase: unpackPhase unpacking source archive /nix/store/vrvj1vxv251k47q2z653hr1yddfxg49m-source source root is source setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "source/tests/test_watch.py" Running phase: patchPhase Running phase: updateAutotoolsGnuConfigScriptsPhase Running phase: configurePhase no configure script, doing nothing Running phase: buildPhase Executing pypaBuildPhase Creating a wheel... pypa build flags: --no-isolation --outdir dist/ --wheel * Getting build dependencies for wheel... /nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated !! ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). By 2027-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) /nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: Apache Software License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! dist._finalize_license_expression() /nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: Apache Software License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running egg_info creating src/mcptoon.egg-info writing src/mcptoon.egg-info/PKG-INFO writing dependency_links to src/mcptoon.egg-info/dependency_links.txt writing entry points to src/mcptoon.egg-info/entry_points.txt writing requirements to src/mcptoon.egg-info/requires.txt writing top-level names to src/mcptoon.egg-info/top_level.txt writing manifest file 'src/mcptoon.egg-info/SOURCES.txt' reading manifest file 'src/mcptoon.egg-info/SOURCES.txt' adding license file 'LICENSE' adding license file 'NOTICE' writing manifest file 'src/mcptoon.egg-info/SOURCES.txt' * Building wheel... /nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated !! ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). By 2027-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) /nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: Apache Software License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! dist._finalize_license_expression() /nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: Apache Software License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running bdist_wheel running build running build_py creating build/lib/mcptoon copying src/mcptoon/plugin.py -> build/lib/mcptoon copying src/mcptoon/native_tools.py -> build/lib/mcptoon copying src/mcptoon/router.py -> build/lib/mcptoon copying src/mcptoon/config.py -> build/lib/mcptoon copying src/mcptoon/errors.py -> build/lib/mcptoon copying src/mcptoon/usage.py -> build/lib/mcptoon copying src/mcptoon/cli.py -> build/lib/mcptoon copying src/mcptoon/serve.py -> build/lib/mcptoon copying src/mcptoon/discover.py -> build/lib/mcptoon copying src/mcptoon/watch.py -> build/lib/mcptoon copying src/mcptoon/footer.py -> build/lib/mcptoon copying src/mcptoon/__init__.py -> build/lib/mcptoon copying src/mcptoon/output.py -> build/lib/mcptoon copying src/mcptoon/packs.py -> build/lib/mcptoon copying src/mcptoon/demo.py -> build/lib/mcptoon copying src/mcptoon/bench.py -> build/lib/mcptoon copying src/mcptoon/sync.py -> build/lib/mcptoon copying src/mcptoon/cache.py -> build/lib/mcptoon copying src/mcptoon/__main__.py -> build/lib/mcptoon copying src/mcptoon/demo_server.py -> build/lib/mcptoon copying src/mcptoon/toon_vendored.py -> build/lib/mcptoon copying src/mcptoon/client.py -> build/lib/mcptoon copying src/mcptoon/installer.py -> build/lib/mcptoon copying src/mcptoon/skills.py -> build/lib/mcptoon copying src/mcptoon/schema_simplifier.py -> build/lib/mcptoon copying src/mcptoon/manifest.py -> build/lib/mcptoon copying src/mcptoon/health.py -> build/lib/mcptoon copying src/mcptoon/welcome.py -> build/lib/mcptoon running egg_info writing src/mcptoon.egg-info/PKG-INFO writing dependency_links to src/mcptoon.egg-info/dependency_links.txt writing entry points to src/mcptoon.egg-info/entry_points.txt writing requirements to src/mcptoon.egg-info/requires.txt writing top-level names to src/mcptoon.egg-info/top_level.txt reading manifest file 'src/mcptoon.egg-info/SOURCES.txt' adding license file 'LICENSE' adding license file 'NOTICE' writing manifest file 'src/mcptoon.egg-info/SOURCES.txt' copying src/mcptoon/packs.json -> build/lib/mcptoon installing to build/bdist.linux-aarch64/wheel running install running install_lib creating build/bdist.linux-aarch64/wheel creating build/bdist.linux-aarch64/wheel/mcptoon copying build/lib/mcptoon/plugin.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/native_tools.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/router.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/config.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/errors.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/usage.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/cli.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/serve.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/discover.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/watch.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/footer.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/__init__.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/output.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/packs.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/demo.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/bench.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/sync.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/cache.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/packs.json -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/__main__.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/demo_server.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/toon_vendored.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/client.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/installer.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/skills.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/schema_simplifier.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/manifest.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/health.py -> build/bdist.linux-aarch64/wheel/./mcptoon copying build/lib/mcptoon/welcome.py -> build/bdist.linux-aarch64/wheel/./mcptoon running install_egg_info Copying src/mcptoon.egg-info to build/bdist.linux-aarch64/wheel/./mcptoon-0.7.23-py3.14.egg-info running install_scripts creating build/bdist.linux-aarch64/wheel/mcptoon-0.7.23.dist-info/WHEEL creating '/build/source/dist/.tmp-t678a5p6/mcptoon-0.7.23-py3-none-any.whl' and adding 'build/bdist.linux-aarch64/wheel' to it adding 'mcptoon/__init__.py' adding 'mcptoon/__main__.py' adding 'mcptoon/bench.py' adding 'mcptoon/cache.py' adding 'mcptoon/cli.py' adding 'mcptoon/client.py' adding 'mcptoon/config.py' adding 'mcptoon/demo.py' adding 'mcptoon/demo_server.py' adding 'mcptoon/discover.py' adding 'mcptoon/errors.py' adding 'mcptoon/footer.py' adding 'mcptoon/health.py' adding 'mcptoon/installer.py' adding 'mcptoon/manifest.py' adding 'mcptoon/native_tools.py' adding 'mcptoon/output.py' adding 'mcptoon/packs.json' adding 'mcptoon/packs.py' adding 'mcptoon/plugin.py' adding 'mcptoon/router.py' adding 'mcptoon/schema_simplifier.py' adding 'mcptoon/serve.py' adding 'mcptoon/skills.py' adding 'mcptoon/sync.py' adding 'mcptoon/toon_vendored.py' adding 'mcptoon/usage.py' adding 'mcptoon/watch.py' adding 'mcptoon/welcome.py' adding 'mcptoon-0.7.23.dist-info/licenses/LICENSE' adding 'mcptoon-0.7.23.dist-info/licenses/NOTICE' adding 'mcptoon-0.7.23.dist-info/METADATA' adding 'mcptoon-0.7.23.dist-info/WHEEL' adding 'mcptoon-0.7.23.dist-info/entry_points.txt' adding 'mcptoon-0.7.23.dist-info/top_level.txt' adding 'mcptoon-0.7.23.dist-info/RECORD' removing build/bdist.linux-aarch64/wheel Successfully built mcptoon-0.7.23-py3-none-any.whl Finished creating a wheel... Finished executing pypaBuildPhase Running phase: pythonRuntimeDepsCheckHook Executing pythonRuntimeDepsCheck Checking runtime dependencies for mcptoon-0.7.23-py3-none-any.whl Finished executing pythonRuntimeDepsCheck Running phase: installPhase Executing pypaInstallPhase Successfully installed mcptoon-0.7.23-py3-none-any.whl Finished executing pypaInstallPhase Running phase: pythonOutputDistPhase Executing pythonOutputDistPhase Finished executing pythonOutputDistPhase Running phase: fixupPhase shrinking RPATHs of ELF executables and libraries in /nix/store/jnj5690hrhh9qw2nd7hzrj2aq1wql62r-mcptoon-0.7.23 checking for references to /build/ in /nix/store/jnj5690hrhh9qw2nd7hzrj2aq1wql62r-mcptoon-0.7.23... patching script interpreter paths in /nix/store/jnj5690hrhh9qw2nd7hzrj2aq1wql62r-mcptoon-0.7.23 stripping (with command strip and flags -S -p) in /nix/store/jnj5690hrhh9qw2nd7hzrj2aq1wql62r-mcptoon-0.7.23/lib /nix/store/jnj5690hrhh9qw2nd7hzrj2aq1wql62r-mcptoon-0.7.23/bin shrinking RPATHs of ELF executables and libraries in /nix/store/xf4nh1z57s1jx09r5l5bpd2b149bwv9p-mcptoon-0.7.23-dist checking for references to /build/ in /nix/store/xf4nh1z57s1jx09r5l5bpd2b149bwv9p-mcptoon-0.7.23-dist... patching script interpreter paths in /nix/store/xf4nh1z57s1jx09r5l5bpd2b149bwv9p-mcptoon-0.7.23-dist Rewriting #!/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/bin/python3.14 to #!/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7 wrapping `/nix/store/jnj5690hrhh9qw2nd7hzrj2aq1wql62r-mcptoon-0.7.23/bin/mcptoon'... Executing pythonRemoveTestsDir Finished executing pythonRemoveTestsDir Running phase: installCheckPhase no Makefile or custom installCheckPhase, doing nothing Running phase: pythonCatchConflictsPhase Running phase: pythonRemoveBinBytecodePhase Running phase: pythonImportsCheckPhase Executing pythonImportsCheckPhase Check whether the following modules can be imported: mcptoon Running phase: pytestCheckPhase Executing pytestCheckPhase pytest flags: -m pytest -k not\ \(test_search_registry_returns_list\)\ and\ not\ \(test_search_smithery_returns_list\)\ and\ not\ \(test_search_mcp_registry_returns_list\) ============================= test session starts ============================== platform linux -- Python 3.14.7, pytest-9.1.1, pluggy-1.6.0 rootdir: /build/source configfile: pyproject.toml testpaths: tests collected 1327 items / 3 deselected / 1324 selected tests/test_bench.py ............. [ 0%] tests/test_cache.py .... [ 1%] tests/test_calculator.py .......................... [ 3%] tests/test_claude_plugin_package.py ............. [ 4%] tests/test_cli_flags.py ........... [ 5%] tests/test_client.py .............................. [ 7%] tests/test_command_coverage.py ......... [ 8%] tests/test_completion.py ........ [ 8%] tests/test_config.py ......... [ 9%] tests/test_dead_server_diagnostics.py ... [ 9%] tests/test_demo.py ..................... [ 11%] tests/test_demo_dead_package.py ........ [ 11%] tests/test_demo_server.py .............................................. [ 15%] ..... [ 15%] tests/test_discover.py .................................... [ 18%] tests/test_doctor_star_hint.py ..... [ 18%] tests/test_envelope.py ........ [ 19%] tests/test_fallback_json.py ...... [ 19%] tests/test_footprint_claims.py .......FF... [ 20%] tests/test_gemini_manifest.py ...... [ 21%] tests/test_health.py ............. [ 22%] tests/test_help_shortcircuit.py ......... [ 22%] tests/test_http_user_agent.py ......... [ 23%] tests/test_installer_registry.py ............................ [ 25%] tests/test_lang.py .......................... [ 27%] tests/test_llms_txt.py ...... [ 27%] tests/test_native_tools.py ................................. [ 30%] tests/test_output.py ................................................... [ 34%] ........................................................................ [ 39%] ................ [ 40%] tests/test_plugin_install.py .......... [ 41%] tests/test_plugin_scan.py ............................... [ 44%] tests/test_policy_overrides.py ................ [ 45%] tests/test_presence.py .............................................. [ 48%] tests/test_readme_links.py ... [ 48%] tests/test_registry_sync.py ............ [ 49%] tests/test_reversible.py ............................................... [ 53%] ................. [ 54%] tests/test_router.py .............................................. [ 58%] tests/test_search.py ................................ [ 60%] tests/test_serve.py .................................................... [ 64%] [ 64%] tests/test_serve_perf.py .......... [ 65%] tests/test_serve_prompts.py ........ [ 65%] tests/test_skill_packs.py ............... [ 66%] tests/test_skill_search.py .......... [ 67%] tests/test_skills.py ................................................... [ 71%] ........................................................................ [ 77%] .............. [ 78%] tests/test_stats_toggle.py ......... [ 78%] tests/test_stderr_pipe_deadlock.py .... [ 79%] tests/test_sync.py ................ [ 80%] tests/test_tier_claims_consistent.py .... [ 80%] tests/test_toml_config.py .......................... [ 82%] tests/test_toon_cross_validate.py ............................... [ 84%] tests/test_uninstall_end_to_end.py .......... [ 85%] tests/test_v02_features.py .................................... [ 88%] tests/test_v04_features.py ................ [ 89%] tests/test_v05_features.py ...................... [ 91%] tests/test_v072_delight.py .............s.. [ 92%] tests/test_v073_http_security.py .............................. [ 94%] tests/test_v074_stdio_timeout.py ............ [ 95%] tests/test_v076_stateless_serve.py ................... [ 97%] tests/test_v07_spec2026.py ..................... [ 98%] tests/test_watch.py .................. [100%] =================================== FAILURES =================================== _________ TestFootprintClaims.test_prose_suite_totals_match_collection _________ self = def test_prose_suite_totals_match_collection(self): """The total is also stated in prose, and that spelling had no guard. README's contributor note still said "(931 tests" and DEVELOPERS.md plus docs/tiktoken-benchmarks.md said "730 tests" - three stale claims that survived every earlier check because they never pair the total with "1 skipped". Prose is judged the same way the badge is. The regex only fires when the number is immediately followed by "test(s)" or "个测试", so the token figures this repo is full of ("8,282 tokens", "581 tokens", "300-page book") are never mistaken for a suite total.""" proc = subprocess.run([sys.executable, "-m", "pytest", "tests/", "--collect-only", "-q"], capture_output=True, text=True, cwd=ROOT) collected = sum(1 for line in proc.stdout.splitlines() if "::" in line) self.assertGreater(collected, 500, "collection failed - the prose claims cannot be judged") seen = 0 for rel in TEST_CLAIM_SURFACES + ("docs/tiktoken-benchmarks.md",): text = (ROOT / rel).read_text(encoding="utf-8") for raw in SUITE_PROSE.findall(text): n = int(raw.replace(",", "")) seen += 1 > self.assertTrue(collected - 1 <= n <= collected, f"{rel} says {raw} tests but {collected} are collected") E AssertionError: False is not true : DEVELOPERS.md says 1336 tests but 1327 are collected tests/test_footprint_claims.py:221: AssertionError ______ TestFootprintClaims.test_suite_total_is_the_same_on_every_surface _______ self = def test_suite_total_is_the_same_on_every_surface(self): """The badge guard only saw the two READMEs. The landing pages, DEVELOPERS.md and ROADMAP.md kept advertising 915 / 894 / v0.7.12 for days after the suite moved on, because nothing compared them against collection. Only the live claim (total + skipped, one line) is judged: ROADMAP's older entries and the CHANGELOG record what was true then and must not be edited. 2026-09-17: the first cut allowed a gap of 5, and the guard's own two new tests pushed the suite past the badge while every surface still said 925. The gap is now the number of tests the tree actually skips (at most one: the bash test on a Windows box without WSL), so a stale total cannot hide.""" proc = subprocess.run([sys.executable, "-m", "pytest", "tests/", "--collect-only", "-q"], capture_output=True, text=True, cwd=ROOT) collected = sum(1 for line in proc.stdout.splitlines() if "::" in line) self.assertGreater(collected, 500, "collection failed - the claims cannot be judged") seen = 0 for rel in TEST_CLAIM_SURFACES: text = (ROOT / rel).read_text(encoding="utf-8") for n in TEST_CLAIM.findall(text): seen += 1 > self.assertTrue(collected - 1 <= int(n) <= collected, f"{rel} advertises {n} passed but {collected} tests are collected") E AssertionError: False is not true : DEVELOPERS.md advertises 1336 passed but 1327 tests are collected tests/test_footprint_claims.py:196: AssertionError =========================== short test summary info ============================ FAILED tests/test_footprint_claims.py::TestFootprintClaims::test_prose_suite_totals_match_collection - AssertionError: False is not true : DEVELOPERS.md says 1336 tests but 1327 ... FAILED tests/test_footprint_claims.py::TestFootprintClaims::test_suite_total_is_the_same_on_every_surface - AssertionError: False is not true : DEVELOPERS.md advertises 1336 passed bu... ====== 2 failed, 1321 passed, 1 skipped, 3 deselected in 69.18s (0:01:09) ======