{"record":{"id":"1dd4a9b6326305f7","repo":"paperclipai/paperclip","slug":"timed-out-waiting-for-paperclip-skill-materializat","errorCode":null,"errorMessage":"Timed out waiting for Paperclip skill materialization lock at ${lockDir}","messagePattern":"Timed out waiting for Paperclip skill materialization lock at (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/adapter-utils/src/server-utils.ts","lineNumber":4206,"sourceCode":"      ? { ...(raw as Record<string, unknown>) }\n      : {};\n  const entries = desiredSkills.flatMap(\n    (value): PaperclipDesiredSkillEntry[] => {\n      if (typeof value === \"string\") {\n        const key = value.trim();\n        return key ? [{ key, versionId: null }] : [];\n      }\n      const key = value.key.trim();\n      if (!key) return [];\n      return [{ key, versionId: value.versionId ?? null }];\n    },\n  );\n  const byKey = new Map<string, PaperclipDesiredSkillEntry>();\n  for (const entry of entries) {\n    if (!byKey.has(entry.key)) byKey.set(entry.key, entry);\n  }\n  const normalized = Array.from(byKey.values());\n  current.desiredSkills = normalized.some((entry) => entry.versionId)\n    ? normalized\n    : normalized.map((entry) => entry.key);\n  next.paperclipSkillSync = current;\n  return next;\n}\n\nexport async function ensurePaperclipSkillSymlink(\n  source: string,\n  target: string,\n  linkSkill: (source: string, target: string) => Promise<void> = (\n    linkSource,\n    linkTarget,\n  ) => fs.symlink(linkSource, linkTarget),\n): Promise<\"created\" | \"repaired\" | \"skipped\"> {\n  const existing = await fs.lstat(target).catch(() => null);\n  if (!existing) {\n    await linkSkill(source, target);\n    return \"created\";","sourceCodeStart":4188,"sourceCodeEnd":4224,"githubUrl":"https://github.com/paperclipai/paperclip/blob/3f1d897a7c018d76563a21c6e39c3c9b03933622/packages/adapter-utils/src/server-utils.ts#L4188-L4224","documentation":"Error \"Timed out waiting for Paperclip skill materialization lock at ${lockDir}\" thrown in paperclipai/paperclip.","triggerScenarios":"Thrown at packages/adapter-utils/src/server-utils.ts:3105 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Remove the stale materialization lock at ${lockDir} if no process holds it, then retry.","Wait for the concurrent materialization to finish and retry."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3f1d897a7c018d76563a21c6e39c3c9b03933622","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}