mcptoon-0.7.17
checks.aarch64-linux.pkgs-mcptoon
· build #4819
· raw
1bld4: building b6g8iznjizlbkv7pmcplbzvqq5fkz60l-mcptoon-0.7.17.drv2Sourcing 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/92q287ar3njqi8x54ib1ap60df8m9720-source18source root is source19setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "source/tests/test_watch.py"configurePhase
20no configure script, doing nothingbuildPhase
21Executing pypaBuildPhase22Creating a wheel...23pypa build flags: --no-isolation --outdir dist/ --wheel24* Getting build dependencies for wheel...25/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 deprecated26!!2728 ********************************************************************************29 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).3031 By 2027-Feb-18, you need to update your project and remove deprecated calls32 or your builds will no longer be supported.3334 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.35 ********************************************************************************3637!!38 corresp(dist, value, root_dir)39/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.40!!4142 ********************************************************************************43 Please consider removing the following classifiers in favor of a SPDX license expression:4445 License :: OSI Approved :: Apache Software License4647 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.48 ********************************************************************************4950!!51 dist._finalize_license_expression()52/nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated.53!!5455 ********************************************************************************56 Please consider removing the following classifiers in favor of a SPDX license expression:5758 License :: OSI Approved :: Apache Software License5960 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.61 ********************************************************************************6263!!64 self._finalize_license_expression()65running egg_info66creating src/mcptoon.egg-info67writing src/mcptoon.egg-info/PKG-INFO68writing dependency_links to src/mcptoon.egg-info/dependency_links.txt69writing entry points to src/mcptoon.egg-info/entry_points.txt70writing requirements to src/mcptoon.egg-info/requires.txt71writing top-level names to src/mcptoon.egg-info/top_level.txt72writing manifest file 'src/mcptoon.egg-info/SOURCES.txt'73reading manifest file 'src/mcptoon.egg-info/SOURCES.txt'74adding license file 'LICENSE'75adding license file 'NOTICE'76writing manifest file 'src/mcptoon.egg-info/SOURCES.txt'77* Building wheel...78/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 deprecated79!!8081 ********************************************************************************82 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).8384 By 2027-Feb-18, you need to update your project and remove deprecated calls85 or your builds will no longer be supported.8687 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.88 ********************************************************************************8990!!91 corresp(dist, value, root_dir)92/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.93!!9495 ********************************************************************************96 Please consider removing the following classifiers in favor of a SPDX license expression:9798 License :: OSI Approved :: Apache Software License99100 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.101 ********************************************************************************102103!!104 dist._finalize_license_expression()105/nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated.106!!107108 ********************************************************************************109 Please consider removing the following classifiers in favor of a SPDX license expression:110111 License :: OSI Approved :: Apache Software License112113 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.114 ********************************************************************************115116!!117 self._finalize_license_expression()118running bdist_wheel119running build120running build_py121creating build/lib/mcptoon122copying src/mcptoon/installer.py -> build/lib/mcptoon123copying src/mcptoon/health.py -> build/lib/mcptoon124copying src/mcptoon/manifest.py -> build/lib/mcptoon125copying src/mcptoon/cli.py -> build/lib/mcptoon126copying src/mcptoon/__main__.py -> build/lib/mcptoon127copying src/mcptoon/watch.py -> build/lib/mcptoon128copying src/mcptoon/native_tools.py -> build/lib/mcptoon129copying src/mcptoon/bench.py -> build/lib/mcptoon130copying src/mcptoon/cache.py -> build/lib/mcptoon131copying src/mcptoon/router.py -> build/lib/mcptoon132copying src/mcptoon/discover.py -> build/lib/mcptoon133copying src/mcptoon/config.py -> build/lib/mcptoon134copying src/mcptoon/schema_simplifier.py -> build/lib/mcptoon135copying src/mcptoon/client.py -> build/lib/mcptoon136copying src/mcptoon/toon_vendored.py -> build/lib/mcptoon137copying src/mcptoon/demo_server.py -> build/lib/mcptoon138copying src/mcptoon/skills.py -> build/lib/mcptoon139copying src/mcptoon/demo.py -> build/lib/mcptoon140copying src/mcptoon/output.py -> build/lib/mcptoon141copying src/mcptoon/__init__.py -> build/lib/mcptoon142copying src/mcptoon/plugin.py -> build/lib/mcptoon143copying src/mcptoon/serve.py -> build/lib/mcptoon144copying src/mcptoon/sync.py -> build/lib/mcptoon145copying src/mcptoon/usage.py -> build/lib/mcptoon146copying src/mcptoon/errors.py -> build/lib/mcptoon147running egg_info148writing src/mcptoon.egg-info/PKG-INFO149writing dependency_links to src/mcptoon.egg-info/dependency_links.txt150writing entry points to src/mcptoon.egg-info/entry_points.txt151writing requirements to src/mcptoon.egg-info/requires.txt152writing top-level names to src/mcptoon.egg-info/top_level.txt153reading manifest file 'src/mcptoon.egg-info/SOURCES.txt'154adding license file 'LICENSE'155adding license file 'NOTICE'156writing manifest file 'src/mcptoon.egg-info/SOURCES.txt'157installing to build/bdist.linux-aarch64/wheel158running install159running install_lib160creating build/bdist.linux-aarch64/wheel161creating build/bdist.linux-aarch64/wheel/mcptoon162copying build/lib/mcptoon/__main__.py -> build/bdist.linux-aarch64/wheel/./mcptoon163copying build/lib/mcptoon/bench.py -> build/bdist.linux-aarch64/wheel/./mcptoon164copying build/lib/mcptoon/watch.py -> build/bdist.linux-aarch64/wheel/./mcptoon165copying build/lib/mcptoon/output.py -> build/bdist.linux-aarch64/wheel/./mcptoon166copying build/lib/mcptoon/plugin.py -> build/bdist.linux-aarch64/wheel/./mcptoon167copying build/lib/mcptoon/demo.py -> build/bdist.linux-aarch64/wheel/./mcptoon168copying build/lib/mcptoon/discover.py -> build/bdist.linux-aarch64/wheel/./mcptoon169copying build/lib/mcptoon/demo_server.py -> build/bdist.linux-aarch64/wheel/./mcptoon170copying build/lib/mcptoon/cache.py -> build/bdist.linux-aarch64/wheel/./mcptoon171copying build/lib/mcptoon/errors.py -> build/bdist.linux-aarch64/wheel/./mcptoon172copying build/lib/mcptoon/sync.py -> build/bdist.linux-aarch64/wheel/./mcptoon173copying build/lib/mcptoon/skills.py -> build/bdist.linux-aarch64/wheel/./mcptoon174copying build/lib/mcptoon/manifest.py -> build/bdist.linux-aarch64/wheel/./mcptoon175copying build/lib/mcptoon/client.py -> build/bdist.linux-aarch64/wheel/./mcptoon176copying build/lib/mcptoon/toon_vendored.py -> build/bdist.linux-aarch64/wheel/./mcptoon177copying build/lib/mcptoon/cli.py -> build/bdist.linux-aarch64/wheel/./mcptoon178copying build/lib/mcptoon/schema_simplifier.py -> build/bdist.linux-aarch64/wheel/./mcptoon179copying build/lib/mcptoon/serve.py -> build/bdist.linux-aarch64/wheel/./mcptoon180copying build/lib/mcptoon/installer.py -> build/bdist.linux-aarch64/wheel/./mcptoon181copying build/lib/mcptoon/__init__.py -> build/bdist.linux-aarch64/wheel/./mcptoon182copying build/lib/mcptoon/config.py -> build/bdist.linux-aarch64/wheel/./mcptoon183copying build/lib/mcptoon/usage.py -> build/bdist.linux-aarch64/wheel/./mcptoon184copying build/lib/mcptoon/router.py -> build/bdist.linux-aarch64/wheel/./mcptoon185copying build/lib/mcptoon/health.py -> build/bdist.linux-aarch64/wheel/./mcptoon186copying build/lib/mcptoon/native_tools.py -> build/bdist.linux-aarch64/wheel/./mcptoon187running install_egg_info188Copying src/mcptoon.egg-info to build/bdist.linux-aarch64/wheel/./mcptoon-0.7.17-py3.14.egg-info189running install_scripts190creating build/bdist.linux-aarch64/wheel/mcptoon-0.7.17.dist-info/WHEEL191creating '/build/source/dist/.tmp-u_qp2msk/mcptoon-0.7.17-py3-none-any.whl' and adding 'build/bdist.linux-aarch64/wheel' to it192adding 'mcptoon/__init__.py'193adding 'mcptoon/__main__.py'194adding 'mcptoon/bench.py'195adding 'mcptoon/cache.py'196adding 'mcptoon/cli.py'197adding 'mcptoon/client.py'198adding 'mcptoon/config.py'199adding 'mcptoon/demo.py'200adding 'mcptoon/demo_server.py'201adding 'mcptoon/discover.py'202adding 'mcptoon/errors.py'203adding 'mcptoon/health.py'204adding 'mcptoon/installer.py'205adding 'mcptoon/manifest.py'206adding 'mcptoon/native_tools.py'207adding 'mcptoon/output.py'208adding 'mcptoon/plugin.py'209adding 'mcptoon/router.py'210adding 'mcptoon/schema_simplifier.py'211adding 'mcptoon/serve.py'212adding 'mcptoon/skills.py'213adding 'mcptoon/sync.py'214adding 'mcptoon/toon_vendored.py'215adding 'mcptoon/usage.py'216adding 'mcptoon/watch.py'217adding 'mcptoon-0.7.17.dist-info/licenses/LICENSE'218adding 'mcptoon-0.7.17.dist-info/licenses/NOTICE'219adding 'mcptoon-0.7.17.dist-info/METADATA'220adding 'mcptoon-0.7.17.dist-info/WHEEL'221adding 'mcptoon-0.7.17.dist-info/entry_points.txt'222adding 'mcptoon-0.7.17.dist-info/top_level.txt'223adding 'mcptoon-0.7.17.dist-info/RECORD'224removing build/bdist.linux-aarch64/wheel225Successfully built mcptoon-0.7.17-py3-none-any.whl226Finished creating a wheel...227Finished executing pypaBuildPhasepythonRuntimeDepsCheckHook
228Executing pythonRuntimeDepsCheck229Checking runtime dependencies for mcptoon-0.7.17-py3-none-any.whl230Finished executing pythonRuntimeDepsCheckinstallPhase
231Executing pypaInstallPhase232Successfully installed mcptoon-0.7.17-py3-none-any.whl233Finished executing pypaInstallPhasepythonOutputDistPhase
234Executing pythonOutputDistPhase235Finished executing pythonOutputDistPhasefixupPhase
236shrinking RPATHs of ELF executables and libraries in /nix/store/y4gaw602cblqrj5zdfi6px34pbvgiznm-mcptoon-0.7.17237checking for references to /build/ in /nix/store/y4gaw602cblqrj5zdfi6px34pbvgiznm-mcptoon-0.7.17...238patching script interpreter paths in /nix/store/y4gaw602cblqrj5zdfi6px34pbvgiznm-mcptoon-0.7.17239stripping (with command strip and flags -S -p) in /nix/store/y4gaw602cblqrj5zdfi6px34pbvgiznm-mcptoon-0.7.17/lib /nix/store/y4gaw602cblqrj5zdfi6px34pbvgiznm-mcptoon-0.7.17/bin240shrinking RPATHs of ELF executables and libraries in /nix/store/9ma36fpzjsl2aw5jz98f7mjlzj2pr3p8-mcptoon-0.7.17-dist241checking for references to /build/ in /nix/store/9ma36fpzjsl2aw5jz98f7mjlzj2pr3p8-mcptoon-0.7.17-dist...242patching script interpreter paths in /nix/store/9ma36fpzjsl2aw5jz98f7mjlzj2pr3p8-mcptoon-0.7.17-dist243Rewriting #!/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/bin/python3.14 to #!/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7244wrapping `/nix/store/y4gaw602cblqrj5zdfi6px34pbvgiznm-mcptoon-0.7.17/bin/mcptoon'...245Executing pythonRemoveTestsDir246Finished executing pythonRemoveTestsDirinstallCheckPhase
247no Makefile or custom installCheckPhase, doing nothingpythonImportsCheckPhase
248Executing pythonImportsCheckPhase249Check whether the following modules can be imported: mcptoonpytestCheckPhase
250Executing pytestCheckPhase251pytest flags: -m pytest252============================= test session starts ==============================253platform linux -- Python 3.14.7, pytest-9.1.1, pluggy-1.6.0254rootdir: /build/source255configfile: pyproject.toml256testpaths: tests257collected 1050 items 258259tests/test_bench.py ............. [ 1%]260tests/test_cache.py .... [ 1%]261tests/test_calculator.py .......................... [ 4%]262tests/test_claude_plugin_package.py ............. [ 5%]263tests/test_cli_flags.py ........... [ 6%]264tests/test_client.py .............................. [ 9%]265tests/test_command_coverage.py .... [ 9%]266tests/test_completion.py ........ [ 10%]267tests/test_config.py ........ [ 11%]268tests/test_dead_server_diagnostics.py ... [ 11%]269tests/test_demo.py ..................... [ 13%]270tests/test_demo_dead_package.py ........ [ 14%]271tests/test_demo_server.py .............................................. [ 18%]272..... [ 19%]273tests/test_discover.py ................................ [ 22%]274tests/test_doctor_star_hint.py ..... [ 22%]275tests/test_envelope.py ........ [ 23%]276tests/test_fallback_json.py ...... [ 23%]277tests/test_footprint_claims.py ............ [ 25%]278tests/test_gemini_manifest.py ...... [ 25%]279tests/test_health.py ............. [ 26%]280tests/test_help_shortcircuit.py ......... [ 27%]281tests/test_llms_txt.py ...... [ 28%]282tests/test_native_tools.py ........................... [ 30%]283tests/test_output.py ................................................... [ 35%]284........................................................................ [ 42%]285................ [ 44%]286tests/test_plugin_install.py .......... [ 45%]287tests/test_plugin_scan.py ............................... [ 48%]288tests/test_policy_overrides.py ................ [ 49%]289tests/test_readme_links.py ... [ 49%]290tests/test_registry_sync.py ............ [ 50%]291tests/test_router.py ............................................ [ 55%]292tests/test_search.py ................................ [ 58%]293tests/test_serve.py .................................................... [ 63%]294... [ 63%]295tests/test_serve_perf.py .......... [ 64%]296tests/test_serve_prompts.py ........ [ 65%]297tests/test_skills.py ................................................... [ 70%]298................................FFF....... [ 74%]299tests/test_stats_toggle.py ......... [ 74%]300tests/test_sync.py ................ [ 76%]301tests/test_tier_claims_consistent.py .... [ 76%]302tests/test_toml_config.py .......................... [ 79%]303tests/test_toon_cross_validate.py ............................... [ 82%]304tests/test_v02_features.py .................................... [ 85%]305tests/test_v04_features.py ................ [ 87%]306tests/test_v05_features.py ...................... [ 89%]307tests/test_v072_delight.py ..........s.. [ 90%]308tests/test_v073_http_security.py .............................. [ 93%]309tests/test_v074_stdio_timeout.py ............ [ 94%]310tests/test_v076_stateless_serve.py ................... [ 96%]311tests/test_v07_spec2026.py ..................... [ 98%]312tests/test_watch.py .................. [100%]313314=================================== FAILURES ===================================315_____ TombstoneTests.test_removal_uses_the_shared_graveyard_when_given_one _____316317self = <tests.test_skills.TombstoneTests testMethod=test_removal_uses_the_shared_graveyard_when_given_one>318319 def setUp(self):320 self.tmp = tempfile.TemporaryDirectory()321 self.base = Path(self.tmp.name)322 self.repo = self.base / "repo"323 (self.repo / "skills" / "alpha").mkdir(parents=True)324 (self.repo / "skills" / "alpha" / "SKILL.md").write_text(325 "---\nname: alpha\ndescription: d\n---\n", encoding="utf-8")326 (self.repo / "unrelated.txt").write_text("keep me\n", encoding="utf-8")327> self._git("init")328329tests/test_skills.py:940: 330_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331tests/test_skills.py:951: in _git332 return subprocess.run(["git", *args], cwd=str(self.repo),333/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/subprocess.py:555: in run334 with Popen(*popenargs, **kwargs) as process:335 ^^^^^^^^^^^^^^^^^^^^^^^^^^^336/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/subprocess.py:1039: in __init__337 self._execute_child(args, executable, preexec_fn, close_fds,338_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 339340self = <Popen: returncode: 255 args: ['git', 'init']>, args = ['git', 'init']341executable = b'git', preexec_fn = None, close_fds = True, pass_fds = ()342cwd = '/build/tmp1mim_5df/repo', env = None, startupinfo = None343creationflags = 0, shell = False, p2cread = -1, p2cwrite = -1, c2pread = 11344c2pwrite = 12, errread = 13, errwrite = 14, restore_signals = True, gid = None345gids = None, uid = None, umask = -1, start_new_session = False346process_group = -1347348 def _execute_child(self, args, executable, preexec_fn, close_fds,349 pass_fds, cwd, env,350 startupinfo, creationflags, shell,351 p2cread, p2cwrite,352 c2pread, c2pwrite,353 errread, errwrite,354 restore_signals,355 gid, gids, uid, umask,356 start_new_session, process_group):357 """Execute program (POSIX version)"""358 359 if isinstance(args, (str, bytes)):360 args = [args]361 elif isinstance(args, os.PathLike):362 if shell:363 raise TypeError('path-like args is not allowed when '364 'shell is true')365 args = [args]366 else:367 args = list(args)368 369 if shell:370 # On Android the default shell is at '/system/bin/sh'.371 unix_shell = ('/system/bin/sh' if372 hasattr(sys, 'getandroidapilevel') else '/nix/store/idnyqaaix26szkvhs1mjgi7990jajz9a-bash-5.3p15/bin/sh')373 args = [unix_shell, "-c"] + args374 if executable:375 args[0] = executable376 377 if executable is None:378 executable = args[0]379 380 sys.audit("subprocess.Popen", executable, args, cwd, env)381 382 if (_USE_POSIX_SPAWN383 and os.path.dirname(executable)384 and preexec_fn is None385 and (not close_fds or _HAVE_POSIX_SPAWN_CLOSEFROM)386 and not pass_fds387 and cwd is None388 and (p2cread == -1 or p2cread > 2)389 and (c2pwrite == -1 or c2pwrite > 2)390 and (errwrite == -1 or errwrite > 2)391 and not start_new_session392 and process_group == -1393 and gid is None394 and gids is None395 and uid is None396 and umask < 0):397 self._posix_spawn(args, executable, env, restore_signals, close_fds,398 p2cread, p2cwrite,399 c2pread, c2pwrite,400 errread, errwrite)401 return402 403 orig_executable = executable404 405 # For transferring possible exec failure from child to parent.406 # Data format: "exception name:hex errno:description"407 # Pickle is not used; it is complex and involves memory allocation.408 errpipe_read, errpipe_write = os.pipe()409 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.410 low_fds_to_close = []411 while errpipe_write < 3:412 low_fds_to_close.append(errpipe_write)413 errpipe_write = os.dup(errpipe_write)414 for low_fd in low_fds_to_close:415 os.close(low_fd)416 try:417 try:418 # We must avoid complex work that could involve419 # malloc or free in the child process to avoid420 # potential deadlocks, thus we do all this here.421 # and pass it to fork_exec()422 423 if env is not None:424 env_list = []425 for k, v in env.items():426 k = os.fsencode(k)427 if b'=' in k:428 raise ValueError("illegal environment variable name")429 env_list.append(k + b'=' + os.fsencode(v))430 else:431 env_list = None # Use execv instead of execve.432 executable = os.fsencode(executable)433 if os.path.dirname(executable):434 executable_list = (executable,)435 else:436 # This matches the behavior of os._execvpe().437 executable_list = tuple(438 os.path.join(os.fsencode(dir), executable)439 for dir in os.get_exec_path(env))440 fds_to_keep = set(pass_fds)441 fds_to_keep.add(errpipe_write)442 self.pid = _fork_exec(443 args, executable_list,444 close_fds, tuple(sorted(map(int, fds_to_keep))),445 cwd, env_list,446 p2cread, p2cwrite, c2pread, c2pwrite,447 errread, errwrite,448 errpipe_read, errpipe_write,449 restore_signals, start_new_session,450 process_group, gid, gids, uid, umask,451 preexec_fn)452 self._child_created = True453 finally:454 # be sure the FD is closed no matter what455 os.close(errpipe_write)456 457 self._close_pipe_fds(p2cread, p2cwrite,458 c2pread, c2pwrite,459 errread, errwrite)460 461 # Wait for exec to fail or succeed; possibly raising an462 # exception (limited in size)463 errpipe_data = bytearray()464 while True:465 part = os.read(errpipe_read, 50000)466 errpipe_data += part467 if not part or len(errpipe_data) > 50000:468 break469 finally:470 # be sure the FD is closed no matter what471 os.close(errpipe_read)472 473 if errpipe_data:474 try:475 pid, sts = os.waitpid(self.pid, 0)476 if pid == self.pid:477 self._handle_exitstatus(sts)478 else:479 self.returncode = sys.maxsize480 except ChildProcessError:481 pass482 483 try:484 exception_name, hex_errno, err_msg = (485 errpipe_data.split(b':', 2))486 # The encoding here should match the encoding487 # written in by the subprocess implementations488 # like _posixsubprocess489 err_msg = err_msg.decode()490 except ValueError:491 exception_name = b'SubprocessError'492 hex_errno = b'0'493 err_msg = 'Bad exception data from child: {!r}'.format(494 bytes(errpipe_data))495 child_exception_type = getattr(496 builtins, exception_name.decode('ascii'),497 SubprocessError)498 if issubclass(child_exception_type, OSError) and hex_errno:499 errno_num = int(hex_errno, 16)500 if err_msg == "noexec:chdir":501 err_msg = ""502 # The error must be from chdir(cwd).503 err_filename = cwd504 elif err_msg == "noexec":505 err_msg = ""506 err_filename = None507 else:508 err_filename = orig_executable509 if errno_num != 0:510 err_msg = os.strerror(errno_num)511 if err_filename is not None:512> raise child_exception_type(errno_num, err_msg, err_filename)513E FileNotFoundError: [Errno 2] No such file or directory: 'git'514515/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/subprocess.py:1990: FileNotFoundError516__________ TombstoneTests.test_removal_without_a_repo_still_archives ___________517518self = <tests.test_skills.TombstoneTests testMethod=test_removal_without_a_repo_still_archives>519520 def setUp(self):521 self.tmp = tempfile.TemporaryDirectory()522 self.base = Path(self.tmp.name)523 self.repo = self.base / "repo"524 (self.repo / "skills" / "alpha").mkdir(parents=True)525 (self.repo / "skills" / "alpha" / "SKILL.md").write_text(526 "---\nname: alpha\ndescription: d\n---\n", encoding="utf-8")527 (self.repo / "unrelated.txt").write_text("keep me\n", encoding="utf-8")528> self._git("init")529530tests/test_skills.py:940: 531_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 532tests/test_skills.py:951: in _git533 return subprocess.run(["git", *args], cwd=str(self.repo),534/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/subprocess.py:555: in run535 with Popen(*popenargs, **kwargs) as process:536 ^^^^^^^^^^^^^^^^^^^^^^^^^^^537/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/subprocess.py:1039: in __init__538 self._execute_child(args, executable, preexec_fn, close_fds,539_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 540541self = <Popen: returncode: 255 args: ['git', 'init']>, args = ['git', 'init']542executable = b'git', preexec_fn = None, close_fds = True, pass_fds = ()543cwd = '/build/tmpmr8ztmpc/repo', env = None, startupinfo = None544creationflags = 0, shell = False, p2cread = -1, p2cwrite = -1, c2pread = 11545c2pwrite = 12, errread = 13, errwrite = 14, restore_signals = True, gid = None546gids = None, uid = None, umask = -1, start_new_session = False547process_group = -1548549 def _execute_child(self, args, executable, preexec_fn, close_fds,550 pass_fds, cwd, env,551 startupinfo, creationflags, shell,552 p2cread, p2cwrite,553 c2pread, c2pwrite,554 errread, errwrite,555 restore_signals,556 gid, gids, uid, umask,557 start_new_session, process_group):558 """Execute program (POSIX version)"""559 560 if isinstance(args, (str, bytes)):561 args = [args]562 elif isinstance(args, os.PathLike):563 if shell:564 raise TypeError('path-like args is not allowed when '565 'shell is true')566 args = [args]567 else:568 args = list(args)569 570 if shell:571 # On Android the default shell is at '/system/bin/sh'.572 unix_shell = ('/system/bin/sh' if573 hasattr(sys, 'getandroidapilevel') else '/nix/store/idnyqaaix26szkvhs1mjgi7990jajz9a-bash-5.3p15/bin/sh')574 args = [unix_shell, "-c"] + args575 if executable:576 args[0] = executable577 578 if executable is None:579 executable = args[0]580 581 sys.audit("subprocess.Popen", executable, args, cwd, env)582 583 if (_USE_POSIX_SPAWN584 and os.path.dirname(executable)585 and preexec_fn is None586 and (not close_fds or _HAVE_POSIX_SPAWN_CLOSEFROM)587 and not pass_fds588 and cwd is None589 and (p2cread == -1 or p2cread > 2)590 and (c2pwrite == -1 or c2pwrite > 2)591 and (errwrite == -1 or errwrite > 2)592 and not start_new_session593 and process_group == -1594 and gid is None595 and gids is None596 and uid is None597 and umask < 0):598 self._posix_spawn(args, executable, env, restore_signals, close_fds,599 p2cread, p2cwrite,600 c2pread, c2pwrite,601 errread, errwrite)602 return603 604 orig_executable = executable605 606 # For transferring possible exec failure from child to parent.607 # Data format: "exception name:hex errno:description"608 # Pickle is not used; it is complex and involves memory allocation.609 errpipe_read, errpipe_write = os.pipe()610 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.611 low_fds_to_close = []612 while errpipe_write < 3:613 low_fds_to_close.append(errpipe_write)614 errpipe_write = os.dup(errpipe_write)615 for low_fd in low_fds_to_close:616 os.close(low_fd)617 try:618 try:619 # We must avoid complex work that could involve620 # malloc or free in the child process to avoid621 # potential deadlocks, thus we do all this here.622 # and pass it to fork_exec()623 624 if env is not None:625 env_list = []626 for k, v in env.items():627 k = os.fsencode(k)628 if b'=' in k:629 raise ValueError("illegal environment variable name")630 env_list.append(k + b'=' + os.fsencode(v))631 else:632 env_list = None # Use execv instead of execve.633 executable = os.fsencode(executable)634 if os.path.dirname(executable):635 executable_list = (executable,)636 else:637 # This matches the behavior of os._execvpe().638 executable_list = tuple(639 os.path.join(os.fsencode(dir), executable)640 for dir in os.get_exec_path(env))641 fds_to_keep = set(pass_fds)642 fds_to_keep.add(errpipe_write)643 self.pid = _fork_exec(644 args, executable_list,645 close_fds, tuple(sorted(map(int, fds_to_keep))),646 cwd, env_list,647 p2cread, p2cwrite, c2pread, c2pwrite,648 errread, errwrite,649 errpipe_read, errpipe_write,650 restore_signals, start_new_session,651 process_group, gid, gids, uid, umask,652 preexec_fn)653 self._child_created = True654 finally:655 # be sure the FD is closed no matter what656 os.close(errpipe_write)657 658 self._close_pipe_fds(p2cread, p2cwrite,659 c2pread, c2pwrite,660 errread, errwrite)661 662 # Wait for exec to fail or succeed; possibly raising an663 # exception (limited in size)664 errpipe_data = bytearray()665 while True:666 part = os.read(errpipe_read, 50000)667 errpipe_data += part668 if not part or len(errpipe_data) > 50000:669 break670 finally:671 # be sure the FD is closed no matter what672 os.close(errpipe_read)673 674 if errpipe_data:675 try:676 pid, sts = os.waitpid(self.pid, 0)677 if pid == self.pid:678 self._handle_exitstatus(sts)679 else:680 self.returncode = sys.maxsize681 except ChildProcessError:682 pass683 684 try:685 exception_name, hex_errno, err_msg = (686 errpipe_data.split(b':', 2))687 # The encoding here should match the encoding688 # written in by the subprocess implementations689 # like _posixsubprocess690 err_msg = err_msg.decode()691 except ValueError:692 exception_name = b'SubprocessError'693 hex_errno = b'0'694 err_msg = 'Bad exception data from child: {!r}'.format(695 bytes(errpipe_data))696 child_exception_type = getattr(697 builtins, exception_name.decode('ascii'),698 SubprocessError)699 if issubclass(child_exception_type, OSError) and hex_errno:700 errno_num = int(hex_errno, 16)701 if err_msg == "noexec:chdir":702 err_msg = ""703 # The error must be from chdir(cwd).704 err_filename = cwd705 elif err_msg == "noexec":706 err_msg = ""707 err_filename = None708 else:709 err_filename = orig_executable710 if errno_num != 0:711 err_msg = os.strerror(errno_num)712 if err_filename is not None:713> raise child_exception_type(errno_num, err_msg, err_filename)714E FileNotFoundError: [Errno 2] No such file or directory: 'git'715716/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/subprocess.py:1990: FileNotFoundError717_________ TombstoneTests.test_tombstone_commits_only_the_removed_path __________718719self = <tests.test_skills.TombstoneTests testMethod=test_tombstone_commits_only_the_removed_path>720721 def setUp(self):722 self.tmp = tempfile.TemporaryDirectory()723 self.base = Path(self.tmp.name)724 self.repo = self.base / "repo"725 (self.repo / "skills" / "alpha").mkdir(parents=True)726 (self.repo / "skills" / "alpha" / "SKILL.md").write_text(727 "---\nname: alpha\ndescription: d\n---\n", encoding="utf-8")728 (self.repo / "unrelated.txt").write_text("keep me\n", encoding="utf-8")729> self._git("init")730731tests/test_skills.py:940: 732_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 733tests/test_skills.py:951: in _git734 return subprocess.run(["git", *args], cwd=str(self.repo),735/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/subprocess.py:555: in run736 with Popen(*popenargs, **kwargs) as process:737 ^^^^^^^^^^^^^^^^^^^^^^^^^^^738/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/subprocess.py:1039: in __init__739 self._execute_child(args, executable, preexec_fn, close_fds,740_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 741742self = <Popen: returncode: 255 args: ['git', 'init']>, args = ['git', 'init']743executable = b'git', preexec_fn = None, close_fds = True, pass_fds = ()744cwd = '/build/tmpwp1ul140/repo', env = None, startupinfo = None745creationflags = 0, shell = False, p2cread = -1, p2cwrite = -1, c2pread = 11746c2pwrite = 12, errread = 13, errwrite = 14, restore_signals = True, gid = None747gids = None, uid = None, umask = -1, start_new_session = False748process_group = -1749750 def _execute_child(self, args, executable, preexec_fn, close_fds,751 pass_fds, cwd, env,752 startupinfo, creationflags, shell,753 p2cread, p2cwrite,754 c2pread, c2pwrite,755 errread, errwrite,756 restore_signals,757 gid, gids, uid, umask,758 start_new_session, process_group):759 """Execute program (POSIX version)"""760 761 if isinstance(args, (str, bytes)):762 args = [args]763 elif isinstance(args, os.PathLike):764 if shell:765 raise TypeError('path-like args is not allowed when '766 'shell is true')767 args = [args]768 else:769 args = list(args)770 771 if shell:772 # On Android the default shell is at '/system/bin/sh'.773 unix_shell = ('/system/bin/sh' if774 hasattr(sys, 'getandroidapilevel') else '/nix/store/idnyqaaix26szkvhs1mjgi7990jajz9a-bash-5.3p15/bin/sh')775 args = [unix_shell, "-c"] + args776 if executable:777 args[0] = executable778 779 if executable is None:780 executable = args[0]781 782 sys.audit("subprocess.Popen", executable, args, cwd, env)783 784 if (_USE_POSIX_SPAWN785 and os.path.dirname(executable)786 and preexec_fn is None787 and (not close_fds or _HAVE_POSIX_SPAWN_CLOSEFROM)788 and not pass_fds789 and cwd is None790 and (p2cread == -1 or p2cread > 2)791 and (c2pwrite == -1 or c2pwrite > 2)792 and (errwrite == -1 or errwrite > 2)793 and not start_new_session794 and process_group == -1795 and gid is None796 and gids is None797 and uid is None798 and umask < 0):799 self._posix_spawn(args, executable, env, restore_signals, close_fds,800 p2cread, p2cwrite,801 c2pread, c2pwrite,802 errread, errwrite)803 return804 805 orig_executable = executable806 807 # For transferring possible exec failure from child to parent.808 # Data format: "exception name:hex errno:description"809 # Pickle is not used; it is complex and involves memory allocation.810 errpipe_read, errpipe_write = os.pipe()811 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.812 low_fds_to_close = []813 while errpipe_write < 3:814 low_fds_to_close.append(errpipe_write)815 errpipe_write = os.dup(errpipe_write)816 for low_fd in low_fds_to_close:817 os.close(low_fd)818 try:819 try:820 # We must avoid complex work that could involve821 # malloc or free in the child process to avoid822 # potential deadlocks, thus we do all this here.823 # and pass it to fork_exec()824 825 if env is not None:826 env_list = []827 for k, v in env.items():828 k = os.fsencode(k)829 if b'=' in k:830 raise ValueError("illegal environment variable name")831 env_list.append(k + b'=' + os.fsencode(v))832 else:833 env_list = None # Use execv instead of execve.834 executable = os.fsencode(executable)835 if os.path.dirname(executable):836 executable_list = (executable,)837 else:838 # This matches the behavior of os._execvpe().839 executable_list = tuple(840 os.path.join(os.fsencode(dir), executable)841 for dir in os.get_exec_path(env))842 fds_to_keep = set(pass_fds)843 fds_to_keep.add(errpipe_write)844 self.pid = _fork_exec(845 args, executable_list,846 close_fds, tuple(sorted(map(int, fds_to_keep))),847 cwd, env_list,848 p2cread, p2cwrite, c2pread, c2pwrite,849 errread, errwrite,850 errpipe_read, errpipe_write,851 restore_signals, start_new_session,852 process_group, gid, gids, uid, umask,853 preexec_fn)854 self._child_created = True855 finally:856 # be sure the FD is closed no matter what857 os.close(errpipe_write)858 859 self._close_pipe_fds(p2cread, p2cwrite,860 c2pread, c2pwrite,861 errread, errwrite)862 863 # Wait for exec to fail or succeed; possibly raising an864 # exception (limited in size)865 errpipe_data = bytearray()866 while True:867 part = os.read(errpipe_read, 50000)868 errpipe_data += part869 if not part or len(errpipe_data) > 50000:870 break871 finally:872 # be sure the FD is closed no matter what873 os.close(errpipe_read)874 875 if errpipe_data:876 try:877 pid, sts = os.waitpid(self.pid, 0)878 if pid == self.pid:879 self._handle_exitstatus(sts)880 else:881 self.returncode = sys.maxsize882 except ChildProcessError:883 pass884 885 try:886 exception_name, hex_errno, err_msg = (887 errpipe_data.split(b':', 2))888 # The encoding here should match the encoding889 # written in by the subprocess implementations890 # like _posixsubprocess891 err_msg = err_msg.decode()892 except ValueError:893 exception_name = b'SubprocessError'894 hex_errno = b'0'895 err_msg = 'Bad exception data from child: {!r}'.format(896 bytes(errpipe_data))897 child_exception_type = getattr(898 builtins, exception_name.decode('ascii'),899 SubprocessError)900 if issubclass(child_exception_type, OSError) and hex_errno:901 errno_num = int(hex_errno, 16)902 if err_msg == "noexec:chdir":903 err_msg = ""904 # The error must be from chdir(cwd).905 err_filename = cwd906 elif err_msg == "noexec":907 err_msg = ""908 err_filename = None909 else:910 err_filename = orig_executable911 if errno_num != 0:912 err_msg = os.strerror(errno_num)913 if err_filename is not None:914> raise child_exception_type(errno_num, err_msg, err_filename)915E FileNotFoundError: [Errno 2] No such file or directory: 'git'916917/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/subprocess.py:1990: FileNotFoundError918=========================== short test summary info ============================919FAILED tests/test_skills.py::TombstoneTests::test_removal_uses_the_shared_graveyard_when_given_one - FileNotFoundError: [Errno 2] No such file or directory: 'git'920FAILED tests/test_skills.py::TombstoneTests::test_removal_without_a_repo_still_archives - FileNotFoundError: [Errno 2] No such file or directory: 'git'921FAILED tests/test_skills.py::TombstoneTests::test_tombstone_commits_only_the_removed_path - FileNotFoundError: [Errno 2] No such file or directory: 'git'922============= 3 failed, 1046 passed, 1 skipped in 65.22s (0:01:05) =============