mcptoon-0.7.19
checks.x86_64-linux.pkgs-mcptoon
· build #4847
· raw
1Sourcing python-remove-tests-dir-hook2Sourcing python-catch-conflicts-hook.sh3Sourcing python-remove-bin-bytecode-hook.sh4Sourcing pypa-build-hook5Using pypaBuildPhase6Sourcing python-runtime-deps-check-hook7Using pythonRuntimeDepsCheckHook8Sourcing pypa-install-hook9Using pypaInstallPhase10Sourcing python-imports-check-hook.sh11Using pythonImportsCheckPhase12Sourcing python-namespaces-hook13Sourcing python-catch-conflicts-hook.sh14Sourcing pytest-check-hook15Using pytestCheckPhase
unpackPhase
16unpacking source archive /nix/store/yjfl19d0f41pk6ws1ji37pa8w25sc7hg-source17source root is source18setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "source/tests/test_watch.py"configurePhase
19no configure script, doing nothingbuildPhase
20Executing pypaBuildPhase21Creating a wheel...22pypa build flags: --no-isolation --outdir dist/ --wheel23* Getting build dependencies for wheel...24/nix/store/gyficbimx12q5975523ps3kjzz8ys4pq-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 deprecated25!!2627 ********************************************************************************28 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).2930 By 2027-Feb-18, you need to update your project and remove deprecated calls31 or your builds will no longer be supported.3233 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.34 ********************************************************************************3536!!37 corresp(dist, value, root_dir)38/nix/store/gyficbimx12q5975523ps3kjzz8ys4pq-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated.39!!4041 ********************************************************************************42 Please consider removing the following classifiers in favor of a SPDX license expression:4344 License :: OSI Approved :: Apache Software License4546 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.47 ********************************************************************************4849!!50 dist._finalize_license_expression()51/nix/store/gyficbimx12q5975523ps3kjzz8ys4pq-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated.52!!5354 ********************************************************************************55 Please consider removing the following classifiers in favor of a SPDX license expression:5657 License :: OSI Approved :: Apache Software License5859 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.60 ********************************************************************************6162!!63 self._finalize_license_expression()64running egg_info65creating src/mcptoon.egg-info66writing src/mcptoon.egg-info/PKG-INFO67writing dependency_links to src/mcptoon.egg-info/dependency_links.txt68writing entry points to src/mcptoon.egg-info/entry_points.txt69writing requirements to src/mcptoon.egg-info/requires.txt70writing top-level names to src/mcptoon.egg-info/top_level.txt71writing manifest file 'src/mcptoon.egg-info/SOURCES.txt'72reading manifest file 'src/mcptoon.egg-info/SOURCES.txt'73adding license file 'LICENSE'74adding license file 'NOTICE'75writing manifest file 'src/mcptoon.egg-info/SOURCES.txt'76* Building wheel...77/nix/store/gyficbimx12q5975523ps3kjzz8ys4pq-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 deprecated78!!7980 ********************************************************************************81 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).8283 By 2027-Feb-18, you need to update your project and remove deprecated calls84 or your builds will no longer be supported.8586 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.87 ********************************************************************************8889!!90 corresp(dist, value, root_dir)91/nix/store/gyficbimx12q5975523ps3kjzz8ys4pq-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated.92!!9394 ********************************************************************************95 Please consider removing the following classifiers in favor of a SPDX license expression:9697 License :: OSI Approved :: Apache Software License9899 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.100 ********************************************************************************101102!!103 dist._finalize_license_expression()104/nix/store/gyficbimx12q5975523ps3kjzz8ys4pq-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated.105!!106107 ********************************************************************************108 Please consider removing the following classifiers in favor of a SPDX license expression:109110 License :: OSI Approved :: Apache Software License111112 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.113 ********************************************************************************114115!!116 self._finalize_license_expression()117running bdist_wheel118running build119running build_py120creating build/lib/mcptoon121copying src/mcptoon/demo.py -> build/lib/mcptoon122copying src/mcptoon/manifest.py -> build/lib/mcptoon123copying src/mcptoon/installer.py -> build/lib/mcptoon124copying src/mcptoon/cli.py -> build/lib/mcptoon125copying src/mcptoon/router.py -> build/lib/mcptoon126copying src/mcptoon/config.py -> build/lib/mcptoon127copying src/mcptoon/native_tools.py -> build/lib/mcptoon128copying src/mcptoon/cache.py -> build/lib/mcptoon129copying src/mcptoon/health.py -> build/lib/mcptoon130copying src/mcptoon/discover.py -> build/lib/mcptoon131copying src/mcptoon/sync.py -> build/lib/mcptoon132copying src/mcptoon/watch.py -> build/lib/mcptoon133copying src/mcptoon/bench.py -> build/lib/mcptoon134copying src/mcptoon/toon_vendored.py -> build/lib/mcptoon135copying src/mcptoon/__main__.py -> build/lib/mcptoon136copying src/mcptoon/output.py -> build/lib/mcptoon137copying src/mcptoon/schema_simplifier.py -> build/lib/mcptoon138copying src/mcptoon/plugin.py -> build/lib/mcptoon139copying src/mcptoon/demo_server.py -> build/lib/mcptoon140copying src/mcptoon/errors.py -> build/lib/mcptoon141copying src/mcptoon/usage.py -> build/lib/mcptoon142copying src/mcptoon/serve.py -> build/lib/mcptoon143copying src/mcptoon/client.py -> build/lib/mcptoon144copying src/mcptoon/__init__.py -> build/lib/mcptoon145copying src/mcptoon/skills.py -> build/lib/mcptoon146running egg_info147writing src/mcptoon.egg-info/PKG-INFO148writing dependency_links to src/mcptoon.egg-info/dependency_links.txt149writing entry points to src/mcptoon.egg-info/entry_points.txt150writing requirements to src/mcptoon.egg-info/requires.txt151writing top-level names to src/mcptoon.egg-info/top_level.txt152reading manifest file 'src/mcptoon.egg-info/SOURCES.txt'153adding license file 'LICENSE'154adding license file 'NOTICE'155writing manifest file 'src/mcptoon.egg-info/SOURCES.txt'156installing to build/bdist.linux-x86_64/wheel157running install158running install_lib159creating build/bdist.linux-x86_64/wheel160creating build/bdist.linux-x86_64/wheel/mcptoon161copying build/lib/mcptoon/output.py -> build/bdist.linux-x86_64/wheel/./mcptoon162copying build/lib/mcptoon/plugin.py -> build/bdist.linux-x86_64/wheel/./mcptoon163copying build/lib/mcptoon/errors.py -> build/bdist.linux-x86_64/wheel/./mcptoon164copying build/lib/mcptoon/toon_vendored.py -> build/bdist.linux-x86_64/wheel/./mcptoon165copying build/lib/mcptoon/installer.py -> build/bdist.linux-x86_64/wheel/./mcptoon166copying build/lib/mcptoon/serve.py -> build/bdist.linux-x86_64/wheel/./mcptoon167copying build/lib/mcptoon/__init__.py -> build/bdist.linux-x86_64/wheel/./mcptoon168copying build/lib/mcptoon/client.py -> build/bdist.linux-x86_64/wheel/./mcptoon169copying build/lib/mcptoon/skills.py -> build/bdist.linux-x86_64/wheel/./mcptoon170copying build/lib/mcptoon/usage.py -> build/bdist.linux-x86_64/wheel/./mcptoon171copying build/lib/mcptoon/router.py -> build/bdist.linux-x86_64/wheel/./mcptoon172copying build/lib/mcptoon/cli.py -> build/bdist.linux-x86_64/wheel/./mcptoon173copying build/lib/mcptoon/manifest.py -> build/bdist.linux-x86_64/wheel/./mcptoon174copying build/lib/mcptoon/config.py -> build/bdist.linux-x86_64/wheel/./mcptoon175copying build/lib/mcptoon/demo.py -> build/bdist.linux-x86_64/wheel/./mcptoon176copying build/lib/mcptoon/__main__.py -> build/bdist.linux-x86_64/wheel/./mcptoon177copying build/lib/mcptoon/demo_server.py -> build/bdist.linux-x86_64/wheel/./mcptoon178copying build/lib/mcptoon/watch.py -> build/bdist.linux-x86_64/wheel/./mcptoon179copying build/lib/mcptoon/bench.py -> build/bdist.linux-x86_64/wheel/./mcptoon180copying build/lib/mcptoon/health.py -> build/bdist.linux-x86_64/wheel/./mcptoon181copying build/lib/mcptoon/native_tools.py -> build/bdist.linux-x86_64/wheel/./mcptoon182copying build/lib/mcptoon/sync.py -> build/bdist.linux-x86_64/wheel/./mcptoon183copying build/lib/mcptoon/discover.py -> build/bdist.linux-x86_64/wheel/./mcptoon184copying build/lib/mcptoon/cache.py -> build/bdist.linux-x86_64/wheel/./mcptoon185copying build/lib/mcptoon/schema_simplifier.py -> build/bdist.linux-x86_64/wheel/./mcptoon186running install_egg_info187Copying src/mcptoon.egg-info to build/bdist.linux-x86_64/wheel/./mcptoon-0.7.19-py3.14.egg-info188running install_scripts189creating build/bdist.linux-x86_64/wheel/mcptoon-0.7.19.dist-info/WHEEL190creating '/build/source/dist/.tmp-nbqbt5kv/mcptoon-0.7.19-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it191adding 'mcptoon/__init__.py'192adding 'mcptoon/__main__.py'193adding 'mcptoon/bench.py'194adding 'mcptoon/cache.py'195adding 'mcptoon/cli.py'196adding 'mcptoon/client.py'197adding 'mcptoon/config.py'198adding 'mcptoon/demo.py'199adding 'mcptoon/demo_server.py'200adding 'mcptoon/discover.py'201adding 'mcptoon/errors.py'202adding 'mcptoon/health.py'203adding 'mcptoon/installer.py'204adding 'mcptoon/manifest.py'205adding 'mcptoon/native_tools.py'206adding 'mcptoon/output.py'207adding 'mcptoon/plugin.py'208adding 'mcptoon/router.py'209adding 'mcptoon/schema_simplifier.py'210adding 'mcptoon/serve.py'211adding 'mcptoon/skills.py'212adding 'mcptoon/sync.py'213adding 'mcptoon/toon_vendored.py'214adding 'mcptoon/usage.py'215adding 'mcptoon/watch.py'216adding 'mcptoon-0.7.19.dist-info/licenses/LICENSE'217adding 'mcptoon-0.7.19.dist-info/licenses/NOTICE'218adding 'mcptoon-0.7.19.dist-info/METADATA'219adding 'mcptoon-0.7.19.dist-info/WHEEL'220adding 'mcptoon-0.7.19.dist-info/entry_points.txt'221adding 'mcptoon-0.7.19.dist-info/top_level.txt'222adding 'mcptoon-0.7.19.dist-info/RECORD'223removing build/bdist.linux-x86_64/wheel224Successfully built mcptoon-0.7.19-py3-none-any.whl225Finished creating a wheel...226Finished executing pypaBuildPhasepythonRuntimeDepsCheckHook
227Executing pythonRuntimeDepsCheck228Checking runtime dependencies for mcptoon-0.7.19-py3-none-any.whl229Finished executing pythonRuntimeDepsCheckinstallPhase
230Executing pypaInstallPhase231Successfully installed mcptoon-0.7.19-py3-none-any.whl232Finished executing pypaInstallPhasepythonOutputDistPhase
233Executing pythonOutputDistPhase234Finished executing pythonOutputDistPhasefixupPhase
235shrinking RPATHs of ELF executables and libraries in /nix/store/0pp724mxy0yxrhys4h7fw5c0r00w4qjj-mcptoon-0.7.19236checking for references to /build/ in /nix/store/0pp724mxy0yxrhys4h7fw5c0r00w4qjj-mcptoon-0.7.19...237patching script interpreter paths in /nix/store/0pp724mxy0yxrhys4h7fw5c0r00w4qjj-mcptoon-0.7.19238stripping (with command strip and flags -S -p) in /nix/store/0pp724mxy0yxrhys4h7fw5c0r00w4qjj-mcptoon-0.7.19/lib /nix/store/0pp724mxy0yxrhys4h7fw5c0r00w4qjj-mcptoon-0.7.19/bin239shrinking RPATHs of ELF executables and libraries in /nix/store/4sm9bfkv40gwdszk1fdhw6pdzic8vn2q-mcptoon-0.7.19-dist240checking for references to /build/ in /nix/store/4sm9bfkv40gwdszk1fdhw6pdzic8vn2q-mcptoon-0.7.19-dist...241patching script interpreter paths in /nix/store/4sm9bfkv40gwdszk1fdhw6pdzic8vn2q-mcptoon-0.7.19-dist242Rewriting #!/nix/store/d64q19q1xjdwfhqx6czvrjgrhq0n3lcc-python3-3.14.7/bin/python3.14 to #!/nix/store/d64q19q1xjdwfhqx6czvrjgrhq0n3lcc-python3-3.14.7243wrapping `/nix/store/0pp724mxy0yxrhys4h7fw5c0r00w4qjj-mcptoon-0.7.19/bin/mcptoon'...244Executing pythonRemoveTestsDir245Finished executing pythonRemoveTestsDirinstallCheckPhase
246no Makefile or custom installCheckPhase, doing nothingpythonImportsCheckPhase
247Executing pythonImportsCheckPhase248Check whether the following modules can be imported: mcptoonpytestCheckPhase
249Executing pytestCheckPhase250pytest flags: -m pytest251============================= test session starts ==============================252platform linux -- Python 3.14.7, pytest-9.1.1, pluggy-1.6.0253rootdir: /build/source254configfile: pyproject.toml255testpaths: tests256collected 1059 items 257258tests/test_bench.py ............. [ 1%]259tests/test_cache.py .... [ 1%]260tests/test_calculator.py .......................... [ 4%]261tests/test_claude_plugin_package.py ............. [ 5%]262tests/test_cli_flags.py ........... [ 6%]263tests/test_client.py .............................. [ 9%]264tests/test_command_coverage.py .... [ 9%]265tests/test_completion.py ........ [ 10%]266tests/test_config.py ......... [ 11%]267tests/test_dead_server_diagnostics.py ... [ 11%]268tests/test_demo.py ..................... [ 13%]269tests/test_demo_dead_package.py ........ [ 14%]270tests/test_demo_server.py .............................................. [ 18%]271..... [ 18%]272tests/test_discover.py .................................... [ 22%]273tests/test_doctor_star_hint.py ..... [ 22%]274tests/test_envelope.py ........ [ 23%]275tests/test_fallback_json.py ...... [ 24%]276tests/test_footprint_claims.py ............ [ 25%]277tests/test_gemini_manifest.py ...... [ 25%]278tests/test_health.py ............. [ 27%]279tests/test_help_shortcircuit.py ......... [ 27%]280tests/test_llms_txt.py ...... [ 28%]281tests/test_native_tools.py ........................... [ 31%]282tests/test_output.py ................................................... [ 35%]283........................................................................ [ 42%]284................ [ 44%]285tests/test_plugin_install.py .......... [ 45%]286tests/test_plugin_scan.py ............................... [ 48%]287tests/test_policy_overrides.py ................ [ 49%]288tests/test_readme_links.py ... [ 49%]289tests/test_registry_sync.py ............ [ 50%]290tests/test_router.py ............................................ [ 55%]291tests/test_search.py ................................ [ 58%]292tests/test_serve.py .................................................... [ 63%]293... [ 63%]294tests/test_serve_perf.py .......... [ 64%]295tests/test_serve_prompts.py ........ [ 65%]296tests/test_skills.py ................................................... [ 69%]297................................FFF....... [ 73%]298tests/test_stats_toggle.py ......... [ 74%]299tests/test_stderr_pipe_deadlock.py .... [ 75%]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/d64q19q1xjdwfhqx6czvrjgrhq0n3lcc-python3-3.14.7/lib/python3.14/subprocess.py:555: in run334 with Popen(*popenargs, **kwargs) as process:335 ^^^^^^^^^^^^^^^^^^^^^^^^^^^336/nix/store/d64q19q1xjdwfhqx6czvrjgrhq0n3lcc-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/tmpun3uf6cr/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/svx59425zxp552p2b8gm11qj5r09b56i-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/d64q19q1xjdwfhqx6czvrjgrhq0n3lcc-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/d64q19q1xjdwfhqx6czvrjgrhq0n3lcc-python3-3.14.7/lib/python3.14/subprocess.py:555: in run535 with Popen(*popenargs, **kwargs) as process:536 ^^^^^^^^^^^^^^^^^^^^^^^^^^^537/nix/store/d64q19q1xjdwfhqx6czvrjgrhq0n3lcc-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/tmpfv73klde/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/svx59425zxp552p2b8gm11qj5r09b56i-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/d64q19q1xjdwfhqx6czvrjgrhq0n3lcc-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/d64q19q1xjdwfhqx6czvrjgrhq0n3lcc-python3-3.14.7/lib/python3.14/subprocess.py:555: in run736 with Popen(*popenargs, **kwargs) as process:737 ^^^^^^^^^^^^^^^^^^^^^^^^^^^738/nix/store/d64q19q1xjdwfhqx6czvrjgrhq0n3lcc-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/tmpaye4rgdn/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/svx59425zxp552p2b8gm11qj5r09b56i-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/d64q19q1xjdwfhqx6czvrjgrhq0n3lcc-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, 1055 passed, 1 skipped in 67.15s (0:01:07) =============