{"record":{"id":"600aeba6c0aa0540","repo":"paperclipai/paperclip","slug":"packagejsonpath-must-declare-a-package-version","errorCode":null,"errorMessage":"${packageJsonPath} must declare a package version.","messagePattern":"(.+?) must declare a package version\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/teams-catalog/src/catalog-builder.ts","lineNumber":167,"sourceCode":"    errors,\n  };\n}\n\nexport async function writeCatalogManifest(packageDir: string) {\n  const result = await buildExpectedCatalogManifest(packageDir);\n  if (result.errors.length > 0) return result;\n\n  const generatedDir = path.join(packageDir, \"generated\");\n  await fs.mkdir(generatedDir, { recursive: true });\n  await fs.writeFile(path.join(generatedDir, \"catalog.json\"), formatCatalogManifest(result.manifest), \"utf8\");\n  return result;\n}\n\nasync function readPackageJson(packageDir: string) {\n  const packageJsonPath = path.join(packageDir, \"package.json\");\n  const packageJson = JSON.parse(await fs.readFile(packageJsonPath, \"utf8\")) as { version?: unknown };\n  const version = asString(packageJson.version);\n  if (!version) throw new Error(`${packageJsonPath} must declare a package version.`);\n  return { version };\n}\n\nasync function readExistingManifest(packageDir: string): Promise<CatalogManifest | null> {\n  try {\n    return JSON.parse(await fs.readFile(path.join(packageDir, \"generated\", \"catalog.json\"), \"utf8\")) as CatalogManifest;\n  } catch {\n    return null;\n  }\n}\n\nasync function loadCatalogSkills(packageDir: string, errors: string[]): Promise<CatalogSkillSummary[]> {\n  try {\n    const catalogPackageName = \"@paperclipai/skills-catalog\";\n    const catalog = await import(catalogPackageName) as { catalogSkills: CatalogSkillSummary[] };\n    const skills = catalog.catalogSkills as CatalogSkillSummary[];\n    return skills.map((skill) => ({ id: skill.id, key: skill.key, slug: skill.slug }));\n  } catch {","sourceCodeStart":149,"sourceCodeEnd":185,"githubUrl":"https://github.com/paperclipai/paperclip/blob/120ae5428fa29bee300bcf806491cd4d965fbb7c/packages/teams-catalog/src/catalog-builder.ts#L149-L185","documentation":"Catalog-builder guard in readPackageJson: the team package's package.json parsed but declares no version field. The generated catalog manifest requires a version per entry, so manifest generation aborts for that package.","triggerScenarios":"Thrown at packages/teams-catalog/src/catalog-builder.ts:167 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add a \"version\" field to the package.json at the reported path."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"120ae5428fa29bee300bcf806491cd4d965fbb7c","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}