{"record":{"id":"717012d465994030","repo":"zeroclaw-labs/zeroclaw","slug":"some-skill-tests-failed","errorCode":null,"errorMessage":"Some skill tests failed.","messagePattern":"Some skill tests failed\\.","errorType":"console","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/skills/mod.rs","lineNumber":550,"sourceCode":"                // Test all skills across every bundle plus the global dir.\n                let install_root = config.install_root_dir();\n                let mut dirs: Vec<PathBuf> = config\n                    .skill_bundles\n                    .keys()\n                    .filter_map(|a| {\n                        zeroclaw_config::skill_bundles::resolve_directory(config, &install_root, a)\n                            .ok()\n                    })\n                    .collect();\n                dirs.push(skills_dir(&config.data_dir));\n                testing::test_all_skills(&dirs, verbose)?\n            };\n\n            testing::print_results(&results);\n\n            let any_failed = results.iter().any(|r| !r.failures.is_empty());\n            if any_failed {\n                anyhow::bail!(\"Some skill tests failed.\");\n            }\n            Ok(())\n        }\n    }\n}\n\nenum SkillLocation {\n    Bundle { alias: String, dir: PathBuf },\n    Global { dir: PathBuf },\n}\n\nimpl SkillLocation {\n    fn dir(&self) -> &Path {\n        match self {\n            SkillLocation::Bundle { dir, .. } | SkillLocation::Global { dir } => dir,\n        }\n    }\n}","sourceCodeStart":532,"sourceCodeEnd":568,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/src/skills/mod.rs#L532-L568","documentation":"`skills test` runs the TEST.sh suites of one skill (--name, or a path) or of every installed skill across all bundles plus the global dir, prints per-skill results, and then bails with this generic message if any result recorded failures. The specifics are in the printed results above the error, never in the message itself.","triggerScenarios":"A skill's TEST.sh exits non-zero or its assertions fail; the full sweep in CI where one skill out of many is broken; tests that depend on tools or fixtures absent from the current environment.","commonSituations":"CI gating on skill repos; third-party skills whose tests assume binaries not on PATH; environment drift between the dev machine and the CI runner.","solutions":["Re-run only the failing skill with detail: `zeroclaw skills test --name <skill> --verbose`","Read the failures list printed before the error and fix the TEST.sh or the skill behavior","Ensure every tool the tests invoke is installed and on PATH","Treat the non-zero exit code as the gate in CI; do not suppress it"],"exampleFix":"# before\nzeroclaw skills test                 # 'Some skill tests failed.'\n\n# after\nzeroclaw skills test --name pdf-tools --verbose","handlingStrategy":"try-catch","validationCode":"// Narrow the blast radius: test one skill before the full sweep\n// zeroclaw skills test --name <skill> --verbose","typeGuard":null,"tryCatchPattern":"let out = Command::new(\"zeroclaw\").args([\"skills\", \"test\"]).output()?;\nlet stdout = String::from_utf8_lossy(&out.stdout);\nlet failed: Vec<&str> = stdout.lines().filter(|l| /* match your results-format marker */ false).collect();\nif !out.status.success() {\n    // report `failed`, exit with the same code to keep the CI gate honest\n}","preventionTips":["Run per-skill tests with --verbose before the full suite when iterating","Pin the tools your TEST.sh scripts invoke (versions on PATH) in CI images","Treat the exit code, not the message, as the CI signal"],"tags":["cli","skills","testing","ci"],"backgroundTag":"test-suite-failure","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}