{"record":{"id":"c24ef1cc1bb80e1c","repo":"stablyai/orca","slug":"current-manifest-is-missing-name","errorCode":null,"errorMessage":"Current manifest is missing ${name}","messagePattern":"Current manifest is missing (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"config/scripts/verify-skill-update-roundtrip.mjs","lineNumber":56,"sourceCode":"  throw new Error(\n    'Usage: verify-skill-update-roundtrip.mjs --cli=<version> --autocrlf=true|false --shape=symlink|copy --source=<owner/repo> --ref=<git-ref>'\n  )\n}\n\nconst sandbox = await mkdtemp(path.join(tmpdir(), 'orca-skill-update-roundtrip-'))\nconst home = path.join(sandbox, 'home')\nconst stateHome = path.join(home, '.state')\nconst fakeBin = path.join(sandbox, 'bin')\nconst targetName = 'orca-cli'\nconst controlName = 'orchestration'\nconst manifest = JSON.parse(await readFile('resources/skills/current-manifest.json', 'utf8'))\nconst registry = JSON.parse(await readFile('resources/skills/snapshot-registry.json', 'utf8'))\nconst releaseMapping = JSON.parse(await readFile('resources/skills/release-mapping.json', 'utf8'))\n\nfunction currentSkill(name) {\n  const skill = manifest.skills.find((entry) => entry.name === name)\n  if (!skill) {\n    throw new Error(`Current manifest is missing ${name}`)\n  }\n  return skill\n}\n\nfunction historicalRelease(name) {\n  const current = currentSkill(name)\n  for (const release of releaseMapping.releases.toReversed()) {\n    const revision = release.skills[name]\n    if (typeof revision !== 'number' || revision >= current.releaseRevision) {\n      continue\n    }\n    const snapshot = registry.skills[name]?.find((entry) => entry.releaseRevision === revision)\n    if (snapshot) {\n      return { tag: `v${release.appVersion}`, snapshot }\n    }\n  }\n  throw new Error(`No historical released snapshot is available for ${name}`)\n}","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/stablyai/orca/blob/1136503c6a231a16dce8f921f6fadb63d181e8db/config/scripts/verify-skill-update-roundtrip.mjs#L38-L74","documentation":"currentSkill() looks up a skill by name in the parsed resources/skills/current-manifest.json skills array. It throws when the named skill is absent — meaning the manifest the test is validating doesn't declare the skill the test expects to exercise.","triggerScenarios":"Renaming or removing a skill in current-manifest.json without updating the test's targetName/controlName constants; running the script against an older checkout whose manifest predates the skill; typo in the skill name passed to currentSkill().","commonSituations":"Skill was renamed in a refactor; manifest was regenerated and a skill entry dropped; test constants point at a skill that lives in a different manifest; branch divergence where the manifest and the test were not updated together.","solutions":["Open resources/skills/current-manifest.json and confirm the skill name is present in the skills array.","If the skill was renamed, update the targetName/controlName constants at the top of the script to match the new name.","Re-run manifest generation (whatever produces current-manifest.json) to ensure the skill is declared.","Check that you are on a branch whose manifest and script are from the same commit."],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":"// Narrow the manifest shape before relying on it:\nfunction isSkillManifest(value) {\n  return (\n    value !== null &&\n    typeof value === 'object' &&\n    Array.isArray(value.skills) &&\n    value.skills.every((s) => s && typeof s.name === 'string' && typeof s.packageDigest === 'string')\n  )\n}\nif (!isSkillManifest(manifest)) {\n  throw new Error('current-manifest.json is not a valid skill manifest')\n}","tryCatchPattern":null,"preventionTips":["Keep the test's targetName/controlName constants next to the manifest and update them together when renaming a skill.","Run a manifest schema check (type-guard above) at script start to fail with a clearer message.","Regenerate the manifest with the same tooling that the release pipeline uses."],"tags":["manifest","skill-update","test-fixture","data-integrity"],"backgroundTag":null,"analyzedSha":"1136503c6a231a16dce8f921f6fadb63d181e8db","analyzedAt":"2026-08-12T23:15:58.167Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}