stablyai/orca · critical
[verify-skills-cli-runtime] skills list omitted ${topic}
Error message
[verify-skills-cli-runtime] skills list omitted ${topic} What it means
Thrown by verifySkillsCliRuntime() when the skills list --json output does not include an expected topic ('orca-cli' or 'computer-use'). The script iterates a hardcoded list of required topics and checks topicNames.has(topic). This verifies that the built CLI advertises the topics the runtime expects to be present.
Source
Thrown at config/scripts/verify-skills-cli-runtime.cjs:184
function parseJson(label, output) {
try {
return JSON.parse(output)
} catch {
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'View on GitHub (pinned to 1136503c6a)
Solutions
- Run skills list --json and inspect the topics array — confirm the name field shape and whether the expected topics appear under a different name.
- If a topic was intentionally renamed, update the hardcoded array ['orca-cli', 'computer-use'] in verifySkillsCliRuntime.
- If a topic is missing from the build, check the skills bundling/packaging step that copies topic manifests into outDir.
- Verify the topics array is populated and not an empty/undefined value due to a list() implementation change.
Example fix
// before: required topic renamed but verifier not updated
for (const topic of ['orca-cli', 'computer-use']) {
if (!topicNames.has(topic)) {
throw new Error(`[verify-skills-cli-runtime] skills list omitted ${topic}`)
}
}
// after: align verifier with renamed topic
for (const topic of ['orca', 'computer-use']) {
if (!topicNames.has(topic)) {
throw new Error(`[verify-skills-cli-runtime] skills list omitted ${topic}`)
}
} Defensive patterns
Strategy: validation
Validate before calling
const REQUIRED_TOPICS = ['orca-cli', 'computer-use']
function validateTopics(list) {
const names = new Set((list.topics ?? []).map((t) => t.name))
const missing = REQUIRED_TOPICS.filter((t) => !names.has(t))
if (missing.length > 0) {
throw new Error(`Missing required topics: ${missing.join(', ')}. Found: ${[...names].join(', ')}`)
}
} Type guard
function isTopicList(value) {
return value !== null && typeof value === 'object' &&
Array.isArray(value.topics) &&
value.topics.every((t) => typeof t?.name === 'string')
} Try / catch
try {
const list = parseJson('skills list', runCli(outDir, ['skills', 'list', '--json']))
if (!isTopicList(list)) {
throw new Error('skills list returned unexpected schema')
}
validateTopics(list)
} catch (err) {
console.error('Topic validation failed:', err.message)
throw err
} Prevention
- When renaming a topic, update REQUIRED_TOPICS in the same commit.
- Add a unit test that asserts the skills registry includes all required topics.
- Document the required-topic contract near the topic registration code.
When it happens
Trigger: skills list returns valid JSON with a topics array, but none of the objects have name === 'orca-cli' or name === 'computer-use'. Caused by a topic being renamed, removed, filtered out, or the topics array being absent/empty in the list response.
Common situations: A topic was renamed in the skills registry (e.g. 'orca-cli' → 'orca'); a conditional registration that skips topics in a minimal build; a packaging step that omits topic manifests from the outDir; a schema change where the name field moved or was nested differently.
Related errors
- [verify-skills-cli-runtime] ${args.join(' ')} exited ${Strin
- [verify-skills-cli-runtime] ${label} emitted invalid JSON:\n
- [verify-skills-cli-runtime] skills get ${topic} returned the
- [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/c073fff8b34aa82f.
Report an issue: GitHub.