stablyai/orca · critical
[verify-skills-cli-runtime] skills get ${topic} returned the
Error message
[verify-skills-cli-runtime] skills get ${topic} returned the wrong guide What it means
Thrown by verifySkillsCliRuntime() when skills get <topic> returns a guide whose body does not contain the string 'name: <topic>'. The script runs skills get <topic> (no --json) and checks guide.includes(`name: ${topic}`). This validates that the guide output is for the correct topic and not a stub, empty string, or wrong-topic response.
Source
Thrown at config/scripts/verify-skills-cli-runtime.cjs:188
throw new Error(`[verify-skills-cli-runtime] ${label} emitted invalid JSON:\n${output}`)
}
}
function verifySkillsCliRuntime(outDir, artifactRoot = dirname(outDir), options = {}) {
const absoluteOutDir = resolve(outDir)
const closure = collectRuntimeClosure(absoluteOutDir, resolve(artifactRoot))
if (options.executeCommands === false) {
return { closureFiles: closure.length, commands: 0 }
}
const list = parseJson('skills list', runCli(absoluteOutDir, ['skills', 'list', '--json']))
const topicNames = new Set(list.topics?.map((topic) => topic.name))
for (const topic of ['orca-cli', 'computer-use']) {
if (!topicNames.has(topic)) {
throw new Error(`[verify-skills-cli-runtime] skills list omitted ${topic}`)
}
const guide = runCli(absoluteOutDir, ['skills', 'get', topic])
if (!guide.includes(`name: ${topic}`)) {
throw new Error(`[verify-skills-cli-runtime] skills get ${topic} returned the wrong guide`)
}
}
const install = parseJson(
'skills install --dry-run',
runCli(absoluteOutDir, [
'skills',
'install',
'--skill',
'orca-cli',
'--agent',
'codex',
'--dry-run',
'--json'
])
)
const update = parseJson(
'skills update --dry-run',View on GitHub (pinned to 1136503c6a)
Solutions
- Run skills get orca-cli and verify the output contains a line matching 'name: orca-cli' (exact format).
- If the guide format was intentionally changed, update the includes() check to match the new format.
- If the wrong guide is returned, debug the skills get argument parsing — confirm the topic name reaches the guide loader.
- If the guide is empty, check that the topic's guide file exists and is readable in the build output.
Example fix
// before: guide format changed to markdown heading
// guide = '## orca-cli\n...'
if (!guide.includes(`name: ${topic}`)) { throw ... }
// after: check the new heading format
if (!guide.includes(`## ${topic}`) && !guide.includes(`name: ${topic}`)) { throw ... } Defensive patterns
Strategy: validation
Validate before calling
function validateGuide(guide, topic) {
const markers = [`name: ${topic}`, `## ${topic}`, `# ${topic}`]
if (!markers.some((m) => guide.includes(m))) {
throw new Error(`Guide for ${topic} does not contain any expected name marker`)
}
} Type guard
function isNonEmptyGuide(value) {
return typeof value === 'string' && value.trim().length > 0
} Try / catch
try {
const guide = runCli(outDir, ['skills', 'get', topic])
if (!isNonEmptyGuide(guide)) {
throw new Error(`skills get ${topic} returned empty guide`)
}
validateGuide(guide, topic)
} catch (err) {
console.error(`Guide validation failed for ${topic}:`, err.message)
throw err
} Prevention
- When changing the guide format, update the includes() marker check in the same commit.
- Add a snapshot test for the skills get output format.
- Ensure the guide loader validates the topic argument before returning content.
When it happens
Trigger: runCli(outDir, ['skills', 'get', topic]) returns a guide string that does not contain the literal 'name: orca-cli' or 'name: computer-use'. Caused by: the guide format changing (e.g. 'name: ' prefix removed), the guide being empty, the wrong topic's guide being returned, or frontmatter using a different key.
Common situations: A guide template change that reformats the name line (e.g. '## orca-cli' instead of 'name: orca-cli'); a bug where skills get ignores its argument and always returns a default guide; the guide file missing its name field in frontmatter after an edit.
Related errors
- [verify-skills-cli-runtime] ${args.join(' ')} exited ${Strin
- [verify-skills-cli-runtime] ${label} emitted invalid JSON:\n
- [verify-skills-cli-runtime] skills list omitted ${topic}
- [verify-skills-cli-runtime] a dry-run reported execution
- [plain-node-entry-guard] daemon-entry.js was killed by ${res
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/f2a4adbbe8fe3d88.
Report an issue: GitHub.